1extern void abort(); 2 3typedef union { 4 struct { 5 unsigned int hi; 6 unsigned int lo; 7 } i; 8 double d; 9} hexdouble; 10 11static const double twoTo52 = 0x1.0p+52; 12 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 33int main() 34{ 35 if (sizeof (double) == 4) 36 return 0; 37 func((double)1.00); 38 return 0; 39} 40