1 #if defined(__i386__) && defined(__FreeBSD__) 2 #include <ieeefp.h> 3 #endif 4 d(unsigned long long k)5double d (unsigned long long k) 6 { 7 double x; 8 9 x = (double) k; 10 return x; 11 } 12 s(unsigned long long k)13float s (unsigned long long k) 14 { 15 float x; 16 17 x = (float) k; 18 return x; 19 } 20 main()21main () 22 { 23 unsigned long long int k; 24 double x; 25 26 #if defined(__i386__) && defined(__FreeBSD__) 27 /* This test case assumes extended-precision, but FreeBSD defaults to 28 double-precision. Make it so. */ 29 fpsetprec (FP_PE); 30 #endif 31 32 if (sizeof (double) >= 8) 33 { 34 k = 0x8693ba6d7d220401ULL; 35 x = d (k); 36 k = (unsigned long long) x; 37 if (k != 0x8693ba6d7d220800ULL) 38 abort (); 39 } 40 41 k = 0x8234508000000001ULL; 42 x = s (k); 43 k = (unsigned long long) x; 44 if (k != 0x8234510000000000ULL) 45 abort (); 46 47 exit (0); 48 } 49 50