#if defined(__i386__) && defined(__FreeBSD__) #include #endif void abort (void); void exit (int); double d (unsigned long long k) { double x; x = (double) k; return x; } float s (unsigned long long k) { float x; x = (float) k; return x; } int main (void) { unsigned long long int k; double x; #if defined(__i386__) && defined(__FreeBSD__) /* This test case assumes extended-precision, but FreeBSD defaults to double-precision. Make it so. */ fpsetprec (FP_PE); #endif if (sizeof (double) >= 8) { k = 0x8693ba6d7d220401ULL; x = d (k); k = (unsigned long long) x; if (k != 0x8693ba6d7d220800ULL) abort (); } k = 0x8234508000000001ULL; x = s (k); k = (unsigned long long) x; if (k != 0x8234510000000000ULL) abort (); exit (0); }