Listing 1

#if FLT_RADIX != 2 && FLT_RADIX != 10
  #if FLT_ROUNDS == 1
   #if DIV_ROUNDS == 1
       y= ldexp((evens+odds)/(evens-odds),m);
   #else
       y= ldexp(odds/(evens-odds) + .5,m+1);
   #endif
  #elif FLT_ROUNDS == 0 /* make it round up */
   y= ldexp((odds*2/(evens-odds)+(odds>0?
       .5*(1+DBL_EPSILON):.5)) + .5, m );
  #else   /* just make sure it gets promoted to maximum precision */
   y= ldexp(((long double)evens+odds)/((long double)evens-odds),m);
  #endif
#else /* undesirable radix, keep intermediate calculation in best zone
** pow(radix,n) * frac where .5 <= frac <= 1 */
   y= odds<0?ldexp(odds*2/(evens-odds)+1,m):
       ldexp(odds/(evens-odds)+.5,m+1);
#endif