From: KHMan <kei...@gm...> - 2017-01-14 15:17:13
|
On 1/14/2017 10:02 PM, tei...@tu... wrote: > > Hello, > I encountered a loss of precision printing a float with C printf. > For values greater than or equal to 1.743397235870361328125 * 2 ^ > 59 (0x5D5F27A4) the printed value is slightly wrong. The error > increases with increasing input. This is 19 digits: 1005000082153537536 The output is fine. When the 32 bit float is converted into 64 bits and then printed, it should be accurate up to about 17 digits. I would not trust anything beyond 17 digits with my favorite teddy bear. Why should one expect 19 digits of precision? Also, one should not expect 8087's extended precision registers to be used anymore unless it is explicitly required. Do a round trip conversion, if you can't get back the number, then maybe we have a problem. If you can get back the number, then there is no problem, only a difference in expectations. > I attached a sample C file. > I tested against glibc 2.2.5 and against my own float to string. > The bug is in msvcrt. My msvcrt version is 7.0.7601.17744, crc32: > DAB48B3A > mingw version: 4.0; gcc version: 5.3.0 > Can anyone please confirm this? > I am sorry if this was posted before, I couldn't find anything. -- Cheers, Kein-Hong Man (esq.) Selangor, Malaysia |