This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
I'm compiling for Renesas RX with gcc 4.5 (Newlib 1.18.0) As RX floating point unit is 32bits the compiler defines double=float (32bits) and DBL_DIG=FLT_DIG=6
( the following is exactly the same for strtod() ) When I do a strof() for the string "1.17549434E-37" I end with the float 1.175494e-035, where the mantissa is ok but the exponent is wrong.
following the code of strtod.c at line 442
k = nd< DBL_DIG + 1 ? nd : DBL_DIG + 1;
k is 7 (nd=9 and DBL_DIG=6) then goes to line 523
e1 += nd - k;
where e1 (-45) is adjusted to -43 (the mantissa was converted correctly, rv.d=1.1754943e+8)
then the approximation will end with 1.175494e-035 (instead of 1.175494e-037)
I don't understand all the details of the precision check and the approximation that follows so I looking for help to solve my problem.
When I compile for double=64 bits and float=32bits so DBL_DIG=15 the results are correct.
Daniel Calcoen
Attachment:
strtod.c.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |