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)13 void 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()33 int main()
34 {
35 	if (sizeof (double) == 4)
36 		return 0;
37 	func((double)1.00);
38 	return 0;
39 }
40