Trying to convert string 6,610557216991946e+35 to double, which corresponds to uint64 number 0x475FD4240F61B4B5, fastpath branch is selected because all conditions are met, but the result is number 0x475FD4240F61B4B6. This happens because FPU internal calculations are done at 80 bits and converting to double the result is rounded to even. Following StrtodBigInteger the result is correct.
Forcing FPU to use double precision, properly setting its control word, it works. Or using SSE2 instead of FPU (which is already true for 64bit applications).
Trying to convert string
6,610557216991946e+35
to double, which corresponds to uint64 number0x475FD4240F61B4B5
, fastpath branch is selected because all conditions are met, but the result is number0x475FD4240F61B4B6
. This happens because FPU internal calculations are done at 80 bits and converting to double the result is rounded to even. Following StrtodBigInteger the result is correct.