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

--- Comment #8 from Дилян Палаузов <dilyan.palauzov at aegee dot org> ---
-fexcess-precision=standard does not ensure consistent behaviour between gcc
13.2.1 20231205 (Red Hat 13.2.1-6) and clang 17.0.5.  -msse2 -mfpmath=sse does
for diff.c:

#include <stdio.h>
#include <math.h>
int main(void) {
  long long l = 9223372036854775806;
  double d = 9223372036854775808.0;
  printf("%f\n", (double)l - d);
  printf("%i\n", pow(3.3, 4.4) == 191.18831051580915);
  return 0;
}


$ gcc -lm -fexcess-precision=standard -m32 -o diff diff.c && ./diff
0.000000
0
$ clang -lm -fexcess-precision=standard -m32 -o diff diff.c && ./diff
0.000000
1
$ gcc -lm -fexcess-precision=standard -m64 -o diff diff.c && ./diff
0.000000
1
$ clang -lm -fexcess-precision=standard -m64 -o diff diff.c && ./diff
0.000000
1
$ gcc -lm -fexcess-precision=fast -m32 -o diff diff.c && ./diff
-2.000000
1
$ clang -lm -fexcess-precision=fast -m32 -o diff diff.c && ./diff
0.000000
1
$ gcc -lm -fexcess-precision=fast -m64 -o diff diff.c && ./diff
0.000000
1
$ clang -lm -fexcess-precision=fast -m64 -o diff diff.c && ./diff
0.000000
1
$ gcc -lm -msse2 -mfpmath=sse -m32 -o diff diff.c && ./diff
0.000000
1
$ clang -lm -msse2 -mfpmath=sse -m32 -o diff diff.c && ./diff
0.000000
1
$ gcc -lm -msse2 -mfpmath=sse -m64 -o diff diff.c && ./diff
0.000000
1
$ clang -lm -msse2 -mfpmath=sse -m64 -o diff diff.c && ./diff
0.000000
1

cl.exe also prints 0.000000 and 1

Reply via email to