https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107370

--- Comment #22 from jacob navia <jacob at jacob dot remcomp.fr> ---
(In reply to Jakub Jelinek from comment #20)
> All I'm arguing is that everything I see from gcc seems to be correct.
> 30 digits precision is not enough for IEEE quad, 36 is enough.
> If I try your sqrt (2^255) case on x86_64, I see:
> #define _GNU_SOURCE
> #include <stdlib.h>
> #include <stdio.h>
> #include <math.h>
> 
> int
> main ()
> {
>   volatile _Float128 x = __builtin_sqrtf128(powf128(2, 225));
>   char buf[256];
>   strfromf128 (buf, 128, "%a", x);
>   strfromf128 (buf + 128, 128, "%.36f", x);
>   printf ("%s\t%s\n", buf, buf + 128);
>   x = x * x;
>   strfromf128 (buf, 128, "%a", x);
>   strfromf128 (buf + 128, 128, "%.36f", x);
>   printf ("%s\t%s\n", buf, buf + 128);
> }
> 
> 0x1.6a09e667f3bcc908b2fb1366ea95p+112
> 7343016637207168931428032607349397.000000000000000000000000000000000000
> 0x1.ffffffffffffffffffffffffffffp+224
> 53919893334301279589334030174039256154977430310253516431710891278336.
> 000000000000000000000000000000000000
> so again, x * x is 1ulp from 0x1.0p+225.

OK, but you are NOT RUNNING IN AN ARM 64 do you? Because that's the machine I
am using...

Reply via email to