From: Christian Heimes Date: Wed, 7 May 2008 22:54:17 +0000 (+0000) Subject: Replace more float hacks with correct math functions X-Git-Tag: v2.6a3~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=33e4a98a3ea14e58a4a1c4a7765b9be33b14a5d9;p=thirdparty%2FPython%2Fcpython.git Replace more float hacks with correct math functions --- diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py index d8d4770fd0ed..b1dd5703dc52 100644 --- a/Lib/json/encoder.py +++ b/Lib/json/encoder.py @@ -2,6 +2,7 @@ """ import re +import math try: from _json import encode_basestring_ascii as c_encode_basestring_ascii @@ -25,20 +26,19 @@ ESCAPE_DCT = { 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)