https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94756
Bug ID: 94756 Summary: strtoflt128 assigns some subnormals incorrectly on MS Windows Product: gcc Version: 8.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libquadmath Assignee: unassigned at gcc dot gnu.org Reporter: sisyphus359 at gmail dot com Target Milestone: --- Created attachment 48370 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48370&action=edit Demo strtoflt128 error with some subnormals on Windows Because this bug ( which could have ties to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87204 ) was presenting itself only on Windows, I originally posted it to the mingw-w64 bug tracker ( https://sourceforge.net/p/mingw-w64/bugs/728/ ). Today, the mingw-w64 developers informed me that it's a libquadmath bug that should be reported here. AFAICT, the subnormals that are being mis-assigned by strtoflt128 are those whose absolute values are in the ranges: 0x1p-16414 to 0x1.ffffffffffffffffffffp-16414 or 0x1.00000318p-16446 to 0x1.ffffffffffffp-16446 For the first of those ranges, all numbers that I tested were mis-assigned. For the latter range, approximately 19 in 20 of the values I tested were being mis-assigned. Attached is a simple demo script that takes the value 1e-4941 (which is within the first range) and does: __float128 f1 = strtoflt128("1e-4941", NULL); __float128 f2 = 1e-4941Q; It then (on Windows) prints out the 2 values as: f1: 0x0.000000014707e947d757fbf6f7p-16382 f2: 0x0.000000014707e946d257f2f674b9p-16382 f2 is assigned correctly, f1 is not. It's the same result for both 32-bit and 64-bit gcc-8.3.0 (and earlier). I've seen reports showing that Cygwin is affected in the same way. On Ubuntu, I found that both f1 and f2 were being assigned correctly. Note the correlation between this output and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87204, wrt that particular value of 1e-4941. Cheers, Rob