1 __extension__ union { double d; int i[2]; } u = { d: -0.25 }; 2 3 /* This assumes the endianness of words in a long long is the same as 4 that for doubles, which doesn't hold for a few platforms, but we 5 can probably special case them here, as appropriate. */ 6 long long endianness_test = 1; 7 #define MSW (*(int*)&endianness_test) 8 9 int signbit(double x)10signbit(double x) 11 { 12 __extension__ union { double d; int i[2]; } u = { d: x }; 13 return u.i[MSW] < 0; 14 } 15 main(void)16int main(void) 17 { 18 if (2*sizeof(int) != sizeof(double) || u.i[MSW] >= 0) 19 exit(0); 20 21 if (!signbit(-0.25)) 22 abort(); 23 24 exit(0); 25 } 26