home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_08_06 / 8n06121a < prev    next >
Text File  |  1990-04-30  |  671b  |  21 lines

  1.  
  2. #if FLT_RADIX != 2 && FLT_RADIX != 10
  3.   #if FLT_ROUNDS == 1
  4.     #if DIV_ROUNDS == 1
  5.         y= ldexp((evens+odds)/(evens-odds),m);
  6.     #else
  7.         y= ldexp(odds/(evens-odds) + .5,m+1);
  8.     #endif
  9.   #elif FLT_ROUNDS == 0 /* make it round up */
  10.     y= ldexp((odds*2/(evens-odds)+(odds>0?
  11.         .5*(1+DBL_EPSILON):.5)) + .5, m );
  12.   #else    /* just make sure it gets promoted to maximum precision */
  13.     y= ldexp(((long double)evens+odds)/((long double)evens-odds),m);
  14.   #endif
  15. #else /* undesirable radix, keep intermediate calculation in best zone
  16. ** pow(radix,n) * frac where  .5 <= frac <= 1  */
  17.     y= odds<0?ldexp(odds*2/(evens-odds)+1,m):
  18.         ldexp(odds/(evens-odds)+.5,m+1);
  19. #endif
  20.  
  21.