Commit 46ed74e8 authored by kenton@google.com's avatar kenton@google.com

Actually, that last revision can be simpler -- we don't need to parse strings at…

Actually, that last revision can be simpler -- we don't need to parse strings at all, as simply entering 1e1000 as a float literal in Python will be evaluated as infinity.
parent d0047c43
...@@ -45,7 +45,7 @@ __all__ = [ 'MessageToString', 'PrintMessage', 'PrintField', ...@@ -45,7 +45,7 @@ __all__ = [ 'MessageToString', 'PrintMessage', 'PrintField',
# Infinity and NaN are not explicitly supported by Python pre-2.6, and # Infinity and NaN are not explicitly supported by Python pre-2.6, and
# float('inf') does not work on Windows (pre-2.6). # float('inf') does not work on Windows (pre-2.6).
_INFINITY = float('1e10000') _INFINITY = 1e10000 # overflows, thus will actually be infinity.
_NAN = _INFINITY * 0 _NAN = _INFINITY * 0
......
...@@ -169,14 +169,14 @@ string StringifyDefaultValue(const FieldDescriptor& field) { ...@@ -169,14 +169,14 @@ string StringifyDefaultValue(const FieldDescriptor& field) {
double value = field.default_value_double(); double value = field.default_value_double();
if (value == numeric_limits<double>::infinity()) { if (value == numeric_limits<double>::infinity()) {
// Python pre-2.6 on Windows does not parse "inf" correctly. However, // Python pre-2.6 on Windows does not parse "inf" correctly. However,
// parsing a number that is too big for a double will return infinity. // a numeric literal that is too big for a double will become infinity.
return "float('1e10000')"; return "1e10000";
} else if (value == -numeric_limits<double>::infinity()) { } else if (value == -numeric_limits<double>::infinity()) {
// See above. // See above.
return "float('-1e10000')"; return "-1e10000";
} else if (value != value) { } else if (value != value) {
// infinity * 0 = nan // infinity * 0 = nan
return "(float('1e10000') * 0)"; return "(1e10000 * 0)";
} else { } else {
return SimpleDtoa(value); return SimpleDtoa(value);
} }
...@@ -185,14 +185,14 @@ string StringifyDefaultValue(const FieldDescriptor& field) { ...@@ -185,14 +185,14 @@ string StringifyDefaultValue(const FieldDescriptor& field) {
float value = field.default_value_float(); float value = field.default_value_float();
if (value == numeric_limits<float>::infinity()) { if (value == numeric_limits<float>::infinity()) {
// Python pre-2.6 on Windows does not parse "inf" correctly. However, // Python pre-2.6 on Windows does not parse "inf" correctly. However,
// parsing a number that is too big for a double will return infinity. // a numeric literal that is too big for a double will become infinity.
return "float('1e10000')"; return "1e10000";
} else if (value == -numeric_limits<float>::infinity()) { } else if (value == -numeric_limits<float>::infinity()) {
// See above. // See above.
return "float('-1e10000')"; return "-1e10000";
} else if (value != value) { } else if (value != value) {
// infinity - infinity = nan // infinity - infinity = nan
return "(float('1e10000') - float('1e10000'))"; return "(1e10000 * 0)";
} else { } else {
return SimpleFtoa(value); return SimpleFtoa(value);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment