1 extern void abort(); 2 3 typedef union { 4 struct { 5 unsigned int hi; 6 unsigned int lo; 7 } i; 8 double d; 9 } hexdouble; 10 11 static const double twoTo52 = 0x1.0p+52; 12 func(double x)13void func ( double x ) 14 { 15 hexdouble argument; 16 register double y, z; 17 unsigned int xHead; 18 argument.d = x; 19 xHead = argument.i.hi & 0x7fffffff; 20 if (__builtin_expect(!!(xHead < 0x43300000u), 1)) 21 { 22 y = ( x - twoTo52 ) + twoTo52; 23 if ( y != x ) 24 abort(); 25 z = x - 0.5; 26 y = ( z - twoTo52 ) + twoTo52; 27 if ( y == (( x - twoTo52 ) + twoTo52) ) 28 abort(); 29 } 30 return; 31 } 32 main()33int main() 34 { 35 if (sizeof (double) == 4) 36 return 0; 37 func((double)1.00); 38 return 0; 39 } 40