Print this page


Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/common/C/nextafter.c
          +++ new/usr/src/lib/libm/common/C/nextafter.c
↓ open down ↓ 29 lines elided ↑ open up ↑
  30   30  #pragma weak _nextafter = __nextafter
  31   31  
  32   32  #include "libm.h"
  33   33  #include <float.h>              /* DBL_MIN */
  34   34  
  35   35  double
  36   36  nextafter(double x, double y) {
  37   37          int             hx, hy, k;
  38   38          double          ans;
  39   39          unsigned        lx;
       40 +        volatile double dummy;
  40   41  
  41   42          hx = ((int *)&x)[HIWORD];
  42   43          lx = ((int *)&x)[LOWORD];
  43   44          hy = ((int *)&y)[HIWORD];
  44   45          k = (hx & ~0x80000000) | lx;
  45   46  
  46   47          if (x == y)
  47   48                  return (y);             /* C99 requirement */
  48   49          if (x != x || y != y)
  49   50                  return (x * y);
↓ open down ↓ 22 lines elided ↑ open up ↑
  72   73                          ((int *)&ans)[HIWORD] = k;
  73   74                  }
  74   75          }
  75   76          k = (k >> 20) & 0x7ff;
  76   77          if (k == 0x7ff) {
  77   78                  /* overflow */
  78   79                  return (_SVID_libm_err(x, y, 46));
  79   80  #if !defined(__lint)
  80   81          } else if (k == 0) {
  81   82                  /* underflow */
  82      -                volatile double dummy = DBL_MIN * copysign(DBL_MIN, x);
       83 +                dummy = DBL_MIN * copysign(DBL_MIN, x);
  83   84  #endif
  84   85          }
  85   86          return (ans);
  86   87  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX