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

Reply via email to