Print this page




  62  */
  63 /* INDENT ON */
  64 
  65 #include "libm.h"
  66 #include "libm_synonyms.h"
  67 #include "longdouble.h"
  68 
  69 #include <sys/isa_defs.h>
  70 
  71 long double
  72 cosl(long double x) {
  73         long double y[2], z = 0.0L;
  74         int n, ix;
  75         int *px = (int *) &x;
  76 
  77         /* trig(Inf or NaN) is NaN */
  78         if (!finitel(x))
  79                 return x - x;
  80 
  81         /* High word of x. */
  82 #if defined(_BIG_ENDIAN)
  83         ix = px[0];
  84 #else
  85         XTOI(px, ix);


  86 #endif
  87 
  88         /* |x| ~< pi/4 */
  89         ix &= 0x7fffffff;
  90         if (ix <= 0x3ffe9220)
  91                 return __k_cosl(x, z);
  92 
  93         /* argument reduction needed */
  94         else {
  95                 n = __rem_pio2l(x, y);
  96                 switch (n & 3) {
  97                 case 0:
  98                         return __k_cosl(y[0], y[1]);
  99                 case 1:
 100                         return -__k_sinl(y[0], y[1]);
 101                 case 2:
 102                         return -__k_cosl(y[0], y[1]);
 103                 case 3:
 104                         return __k_sinl(y[0], y[1]);
 105                 /* NOTREACHED */


  62  */
  63 /* INDENT ON */
  64 
  65 #include "libm.h"
  66 #include "libm_synonyms.h"
  67 #include "longdouble.h"
  68 
  69 #include <sys/isa_defs.h>
  70 
  71 long double
  72 cosl(long double x) {
  73         long double y[2], z = 0.0L;
  74         int n, ix;
  75         int *px = (int *) &x;
  76 
  77         /* trig(Inf or NaN) is NaN */
  78         if (!finitel(x))
  79                 return x - x;
  80 
  81         /* High word of x. */
  82 #if defined(__i386) || defined(__amd64)


  83         XTOI(px, ix);
  84 #else
  85         ix = px[0];
  86 #endif
  87 
  88         /* |x| ~< pi/4 */
  89         ix &= 0x7fffffff;
  90         if (ix <= 0x3ffe9220)
  91                 return __k_cosl(x, z);
  92 
  93         /* argument reduction needed */
  94         else {
  95                 n = __rem_pio2l(x, y);
  96                 switch (n & 3) {
  97                 case 0:
  98                         return __k_cosl(y[0], y[1]);
  99                 case 1:
 100                         return -__k_sinl(y[0], y[1]);
 101                 case 2:
 102                         return -__k_cosl(y[0], y[1]);
 103                 case 3:
 104                         return __k_sinl(y[0], y[1]);
 105                 /* NOTREACHED */