Print this page




  37  */
  38 
  39 #include "libm.h"
  40 
  41 #if defined(__x86)
  42 #define __swapRD        __swap87RD
  43 #endif
  44 extern enum fp_direction_type __swapRD(enum fp_direction_type);
  45 
  46 long double
  47 log1pl(long double x) {
  48         long double y;
  49         enum fp_direction_type rd;
  50 
  51         if (x != x)
  52                 return (x + x);
  53         if (x < -1.L)
  54                 return (logl(x));
  55         rd = __swapRD(fp_nearest);
  56         y = 1.L + x;
  57         if (y != 1.L)
  58                 if (y == x)
  59                         x = logl(x);
  60                 else
  61                         x *= logl(y) / (y - 1.L);

  62         if (rd != fp_nearest)
  63                 (void) __swapRD(rd);
  64         return (x);
  65 }


  37  */
  38 
  39 #include "libm.h"
  40 
  41 #if defined(__x86)
  42 #define __swapRD        __swap87RD
  43 #endif
  44 extern enum fp_direction_type __swapRD(enum fp_direction_type);
  45 
  46 long double
  47 log1pl(long double x) {
  48         long double y;
  49         enum fp_direction_type rd;
  50 
  51         if (x != x)
  52                 return (x + x);
  53         if (x < -1.L)
  54                 return (logl(x));
  55         rd = __swapRD(fp_nearest);
  56         y = 1.L + x;
  57         if (y != 1.L) {
  58                 if (y == x)
  59                         x = logl(x);
  60                 else
  61                         x *= logl(y) / (y - 1.L);
  62         }
  63         if (rd != fp_nearest)
  64                 (void) __swapRD(rd);
  65         return (x);
  66 }