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.
This commit is contained in:
parent
d0047c43d9
commit
46ed74e8d4
2 changed files with 9 additions and 9 deletions
|
@ -45,7 +45,7 @@ __all__ = [ 'MessageToString', 'PrintMessage', 'PrintField',
|
|||
|
||||
# Infinity and NaN are not explicitly supported by Python pre-2.6, and
|
||||
# float('inf') does not work on Windows (pre-2.6).
|
||||
_INFINITY = float('1e10000')
|
||||
_INFINITY = 1e10000 # overflows, thus will actually be infinity.
|
||||
_NAN = _INFINITY * 0
|
||||
|
||||
|
||||
|
|
|
@ -169,14 +169,14 @@ string StringifyDefaultValue(const FieldDescriptor& field) {
|
|||
double value = field.default_value_double();
|
||||
if (value == numeric_limits<double>::infinity()) {
|
||||
// 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.
|
||||
return "float('1e10000')";
|
||||
// a numeric literal that is too big for a double will become infinity.
|
||||
return "1e10000";
|
||||
} else if (value == -numeric_limits<double>::infinity()) {
|
||||
// See above.
|
||||
return "float('-1e10000')";
|
||||
return "-1e10000";
|
||||
} else if (value != value) {
|
||||
// infinity * 0 = nan
|
||||
return "(float('1e10000') * 0)";
|
||||
return "(1e10000 * 0)";
|
||||
} else {
|
||||
return SimpleDtoa(value);
|
||||
}
|
||||
|
@ -185,14 +185,14 @@ string StringifyDefaultValue(const FieldDescriptor& field) {
|
|||
float value = field.default_value_float();
|
||||
if (value == numeric_limits<float>::infinity()) {
|
||||
// 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.
|
||||
return "float('1e10000')";
|
||||
// a numeric literal that is too big for a double will become infinity.
|
||||
return "1e10000";
|
||||
} else if (value == -numeric_limits<float>::infinity()) {
|
||||
// See above.
|
||||
return "float('-1e10000')";
|
||||
return "-1e10000";
|
||||
} else if (value != value) {
|
||||
// infinity - infinity = nan
|
||||
return "(float('1e10000') - float('1e10000'))";
|
||||
return "(1e10000 * 0)";
|
||||
} else {
|
||||
return SimpleFtoa(value);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue