[Python-checkins] r62841 - python/trunk/Lib/json/encoder.py

christian.heimes python-checkins at python.org
Thu May 8 00:54:17 CEST 2008


Author: christian.heimes
Date: Thu May  8 00:54:17 2008
New Revision: 62841

Log:
Replace more float hacks with correct math functions

Modified:
   python/trunk/Lib/json/encoder.py

Modified: python/trunk/Lib/json/encoder.py
==============================================================================
--- python/trunk/Lib/json/encoder.py	(original)
+++ python/trunk/Lib/json/encoder.py	Thu May  8 00:54:17 2008
@@ -2,6 +2,7 @@
 """
 
 import re
+import math
 
 try:
     from _json import encode_basestring_ascii as c_encode_basestring_ascii
@@ -25,20 +26,19 @@
 for i in range(0x20):
     ESCAPE_DCT.setdefault(chr(i), '\\u{0:04x}'.format(i))
 
-# Assume this produces an infinity on all machines (probably not guaranteed)
-INFINITY = float('1e66666')
 FLOAT_REPR = repr
 
 def floatstr(o, allow_nan=True):
     # Check for specials.  Note that this type of test is processor- and/or
     # platform-specific, so do tests which don't depend on the internals.
 
-    if o != o:
+    if math.isnan(o):
         text = 'NaN'
-    elif o == INFINITY:
-        text = 'Infinity'
-    elif o == -INFINITY:
-        text = '-Infinity'
+    elif math.isinf(o):
+        if math.copysign(1., o) == 1.:
+            text = 'Infinity'
+        else:
+            text = '-Infinity'
     else:
         return FLOAT_REPR(o)
 


More information about the Python-checkins mailing list