Print this page


Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libm/common/Q/asinl.c
          +++ new/usr/src/lib/libm/common/Q/asinl.c
↓ open down ↓ 45 lines elided ↑ open up ↑
  46   46  #include "libm.h"
  47   47  
  48   48  static const long double zero = 0.0L, small = 1.0e-20L, half = 0.5L, one = 1.0L;
  49   49  #ifndef lint
  50   50  static const long double big = 1.0e+20L;
  51   51  #endif
  52   52  
  53   53  long double
  54   54  asinl(long double x) {
  55   55          long double t, w;
       56 +        volatile long double dummy;
  56   57  
  57   58          w = fabsl(x);
  58   59          if (isnanl(x))
  59   60                  return (x + x);
  60   61          else if (w <= half) {
  61   62                  if (w < small) {
  62   63  #ifndef lint
  63      -                        volatile long double dummy = w + big;
       64 +                        dummy = w + big;
  64   65                                                          /* inexact if w != 0 */
  65   66  #endif
  66   67                          return (x);
  67   68                  } else
  68   69                          return (atanl(x / sqrtl(one - x * x)));
  69   70          } else if (w < one) {
  70   71                  t = one - w;
  71   72                  w = t + t;
  72   73                  return (atanl(x / sqrtl(w - t * t)));
  73   74          } else if (w == one)
  74   75                  return (atan2l(x, zero));       /* asin(+-1) =  +- PI/2 */
  75   76          else
  76   77                  return (zero / zero);           /* |x| > 1: invalid */
  77   78  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX