This simple program gives a wrong result on Windows/MSYS2. On Ubuntu 18.04, it works properly:
#include <math.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
double a = -1.5708;
double c = cos(-1.5708);
double d = cos(a);
unsigned long long *lc = (unsigned long long *)&c;
unsigned long long *ld = (unsigned long long *)&d;
printf("c = %.17e %llu\n", c, *lc);
printf("d = %.17e %llu\n", d, *ld);
if (c == d)
printf("correct result\n");
else
printf("wrong result\n");
return 0;
}
Windows/MSYS2:
$ gcc cos.c -o cos -lm ; ./cos
c = -3.67320510334657393e-06 13749155573439758092
d = -3.67320510334657563e-06 13749155573439758096
wrong result
Ubuntu 18.04:
olivier@ubuntu:~$ gcc cos.c -o cos -lm ; ./cos
c = -3.67320510334657393e-06 13749155573439758092
d = -3.67320510334657393e-06 13749155573439758092
correct result
I am doing something wrong, is it a bug of gcc on MSYS2 or something else?