[perl #120426] atof() small value rounding errors
For something like 0.153e-305, which is small, but not quite the smallest
number (which is around 2.2e-308), adding extra digits to the fractional part
could cause unnecessary rounding to zero.
From the bug report:
$ echo 0.1530e-305 | perl -e '$v = <STDIN>; print "v=", $v + 0, "\n";'
v=0
$ echo 0.153e-305 | perl -e '$v = <STDIN>; print "v=", $v + 0, "\n";'
v=1.53e-306
This was because 0.1234e-305 is calculated as
1234 / (10^309)
and 10^309 becomes infinity. In these edge cases, repeatedly decrement
the exponent and divide the mantissa by 10 until the exponent becomes in
range; in this case we instead calculate
123 / (10^308)