1  #if defined(__i386__) && defined(__FreeBSD__)
       2  #include <ieeefp.h>
       3  #endif
       4  
       5  double d (unsigned long long k)
       6  {
       7    double x;
       8  
       9    x = (double) k;
      10    return x;
      11  }
      12  
      13  float s (unsigned long long k)
      14  {
      15    float x;
      16  
      17    x = (float) k;
      18    return x;
      19  }
      20  
      21  main ()
      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