35#pragma warning(disable : 4723) 
   54#define EXTRACT_WORDS(ix0, ix1, d)               \ 
   56    uint64_t bits = base::bit_cast<uint64_t>(d); \ 
   58    (ix1) = bits & 0xFFFFFFFFu;                  \ 
 
   63#define GET_HIGH_WORD(i, d)                      \ 
   65    uint64_t bits = base::bit_cast<uint64_t>(d); \ 
 
   71#define GET_LOW_WORD(i, d)                       \ 
   73    uint64_t bits = base::bit_cast<uint64_t>(d); \ 
   74    (i) = bits & 0xFFFFFFFFu;                    \ 
 
   79#define INSERT_WORDS(d, ix0, ix1)             \ 
   82    bits |= static_cast<uint64_t>(ix0) << 32; \ 
   83    bits |= static_cast<uint32_t>(ix1);       \ 
   84    (d) = base::bit_cast<double>(bits);       \ 
 
   89#define SET_HIGH_WORD(d, v)                      \ 
   91    uint64_t bits = base::bit_cast<uint64_t>(d); \ 
   92    bits &= 0x0000'0000'FFFF'FFFF;               \ 
 
   93    bits |= static_cast<uint64_t>(v) << 32;      \ 
   94    (d) = base::bit_cast<double>(bits);          \ 
   99#define SET_LOW_WORD(d, v)                       \ 
  101    uint64_t bits = base::bit_cast<uint64_t>(d); \ 
  102    bits &= 0xFFFF'FFFF'0000'0000;               \ 
  103    bits |= static_cast<uint32_t>(v);            \ 
  104    (d) = base::bit_cast<double>(bits);          \ 
  108int __kernel_rem_pio2(
double* 
x, 
double* 
y, 
int e0, 
int nx, 
int prec,
 
  118int32_t __ieee754_rem_pio2(
double x, 
double *
y) {
 
  122  static const int32_t two_over_pi[] = {
 
  123      0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, 0x95993C,
 
  124      0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A, 0x424DD2, 0xE00649,
 
  125      0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, 0xA73EE8, 0x8235F5, 0x2EBB44,
 
  126      0x84E99C, 0x7026B4, 0x5F7E41, 0x3991D6, 0x398353, 0x39F49C, 0x845F8B,
 
  127      0xBDF928, 0x3B1FF8, 0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D,
 
  128      0x367ECF, 0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5,
 
  129      0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, 0x560330,
 
  130      0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, 0x91615E, 0xE61B08,
 
  131      0x659985, 0x5F14A0, 0x68408D, 0xFFD880, 0x4D7327, 0x310606, 0x1556CA,
 
  132      0x73A8C9, 0x60E27B, 0xC08C6B,
 
  135  static const int32_t npio2_hw[] = {
 
  136      0x3FF921FB, 0x400921FB, 0x4012D97C, 0x401921FB, 0x401F6A7A, 0x4022D97C,
 
  137      0x4025FDBB, 0x402921FB, 0x402C463A, 0x402F6A7A, 0x4031475C, 0x4032D97C,
 
  138      0x40346B9C, 0x4035FDBB, 0x40378FDB, 0x403921FB, 0x403AB41B, 0x403C463A,
 
  139      0x403DD85A, 0x403F6A7A, 0x40407E4C, 0x4041475C, 0x4042106C, 0x4042D97C,
 
  140      0x4043A28C, 0x40446B9C, 0x404534AC, 0x4045FDBB, 0x4046C6CB, 0x40478FDB,
 
  141      0x404858EB, 0x404921FB,
 
  155      zero = 0.00000000000000000000e+00,    
 
  156      half = 5.00000000000000000000e-01,    
 
  157      two24 = 1.67772160000000000000e+07,   
 
  158      invpio2 = 6.36619772367581382433e-01, 
 
  159      pio2_1 = 1.57079632673412561417e+00,  
 
  160      pio2_1t = 6.07710050650619224932e-11, 
 
  161      pio2_2 = 6.07710050630396597660e-11,  
 
  162      pio2_2t = 2.02226624879595063154e-21, 
 
  163      pio2_3 = 2.02226624871116645580e-21,  
 
  164      pio2_3t = 8.47842766036889956997e-32; 
 
  166  double z, w, t, 
r, 
fn;
 
  168  int32_t e0, 
i, j, nx, 
n, ix, hx;
 
  173  ix = hx & 0x7FFFFFFF;
 
  174  if (ix <= 0x3FE921FB) { 
 
  179  if (ix < 0x4002D97C) { 
 
  182      if (ix != 0x3FF921FB) { 
 
  184        y[1] = (
z - 
y[0]) - pio2_1t;
 
  188        y[1] = (
z - 
y[0]) - pio2_2t;
 
  193      if (ix != 0x3FF921FB) { 
 
  195        y[1] = (
z - 
y[0]) + pio2_1t;
 
  199        y[1] = (
z - 
y[0]) + pio2_2t;
 
  204  if (ix <= 0x413921FB) { 
 
  206    n = 
static_cast<int32_t
>(t * invpio2 + half);
 
  207    fn = 
static_cast<double>(
n);
 
  210    if (n < 32 && ix != npio2_hw[n - 1]) {
 
  217      i = j - ((high >> 20) & 0x7FF);
 
  222        w = 
fn * pio2_2t - ((t - 
r) - w);
 
  225        i = j - ((high >> 20) & 0x7FF);
 
  230          w = 
fn * pio2_3t - ((t - 
r) - w);
 
  235    y[1] = (
r - 
y[0]) - w;
 
  247  if (ix >= 0x7FF00000) { 
 
  253  SET_LOW_WORD(
z, low);
 
  254  e0 = (ix >> 20) - 1046; 
 
  255  SET_HIGH_WORD(
z, ix - 
static_cast<int32_t
>(
static_cast<uint32_t
>(e0) << 20));
 
  256  for (
i = 0; 
i < 2; 
i++) {
 
  257    tx[
i] = 
static_cast<double>(
static_cast<int32_t
>(
z));
 
  258    z = (
z - tx[
i]) * two24;
 
  262  while (tx[nx - 1] == zero) nx--; 
 
  263  n = __kernel_rem_pio2(tx, 
y, e0, nx, 2, two_over_pi);
 
  307      one = 1.00000000000000000000e+00, 
 
  308      C1 = 4.16666666666666019037e-02,  
 
  309      C2 = -1.38888888888741095749e-03, 
 
  310      C3 = 2.48015872894767294178e-05,  
 
  311      C4 = -2.75573143513906633035e-07, 
 
  312      C5 = 2.08757232129817482790e-09,  
 
  313      C6 = -1.13596475577881948265e-11; 
 
  315  double a, iz, 
z, 
r, qx;
 
  319  if (ix < 0x3E400000) {                      
 
  320    if (
static_cast<int>(
x) == 0) 
return one; 
 
  323  r = 
z * (
C1 + 
z * (
C2 + 
z * (C3 + 
z * (C4 + 
z * (C5 + 
z * C6)))));
 
  324  if (ix < 0x3FD33333) { 
 
  325    return one - (0.5 * 
z - (
z * 
r - 
x * 
y));
 
  327    if (ix > 0x3FE90000) { 
 
  334    return a - (iz - (
z * 
r - 
x * 
y));
 
  443int __kernel_rem_pio2(
double *
x, 
double *
y, 
int e0, 
int nx, 
int prec,
 
  444                      const int32_t *ipio2) {
 
  451  static const int init_jk[] = {2, 3, 4, 6}; 
 
  453  static const double PIo2[] = {
 
  454      1.57079625129699707031e+00, 
 
  455      7.54978941586159635335e-08, 
 
  456      5.39030252995776476554e-15, 
 
  457      3.28200341580791294123e-22, 
 
  458      1.27065575308067607349e-29, 
 
  459      1.22933308981111328932e-36, 
 
  460      2.73370053816464559624e-44, 
 
  461      2.16741683877804819444e-51, 
 
  467      two24 = 1.67772160000000000000e+07,  
 
  468      twon24 = 5.96046447753906250000e-08; 
 
  470  int32_t jz, jx, jv, jp, jk, 
carry, 
n, iq[20], 
i, j, k, 
m, q0, ih;
 
  471  double z, fw, f[20], fq[20], q[20];
 
  481  q0 = e0 - 24 * (jv + 1);
 
  486  for (
i = 0; 
i <= 
m; 
i++, j++) {
 
  487    f[
i] = (j < 0) ? zero : static_cast<double>(ipio2[j]);
 
  491  for (
i = 0; 
i <= jk; 
i++) {
 
  492    for (j = 0, fw = 0.0; j <= jx; j++) fw += 
x[j] * f[jx + 
i - j];
 
  499  for (
i = 0, j = jz, 
z = q[jz]; j > 0; 
i++, j--) {
 
  500    fw = 
static_cast<double>(
static_cast<int32_t>(twon24 * 
z));
 
  501    iq[
i] = 
static_cast<int32_t>(
z - two24 * fw);
 
  507  z -= 8.0 * floor(
z * 0.125); 
 
  509  z -= 
static_cast<double>(
n);
 
  512    i = (iq[jz - 1] >> (24 - q0));
 
  514    iq[jz - 1] -= 
i << (24 - q0);
 
  515    ih = iq[jz - 1] >> (23 - q0);
 
  516  } 
else if (q0 == 0) {
 
  517    ih = iq[jz - 1] >> 23;
 
  518  } 
else if (
z >= 0.5) {
 
  525    for (
i = 0; 
i < jz; 
i++) { 
 
  530          iq[
i] = 0x1000000 - j;
 
  533        iq[
i] = 0xFFFFFF - j;
 
  539          iq[jz - 1] &= 0x7FFFFF;
 
  542          iq[jz - 1] &= 0x3FFFFF;
 
  548      if (carry != 0) 
z -= scalbn(
one, q0);
 
  555    for (
i = jz - 1; 
i >= jk; 
i--) j |= iq[
i];
 
  557      for (k = 1; jk >= k && iq[jk - k] == 0; k++) {
 
  561      for (
i = jz + 1; 
i <= jz + k; 
i++) { 
 
  562        f[jx + 
i] = ipio2[jv + 
i];
 
  563        for (j = 0, fw = 0.0; j <= jx; j++) fw += 
x[j] * f[jx + 
i - j];
 
  575    while (iq[jz] == 0) {
 
  582      fw = 
static_cast<double>(
static_cast<int32_t>(twon24 * 
z));
 
  583      iq[jz] = 
z - two24 * fw;
 
  593  fw = scalbn(
one, q0);
 
  594  for (
i = jz; 
i >= 0; 
i--) {
 
  600  for (
i = jz; 
i >= 0; 
i--) {
 
  601    for (fw = 0.0, k = 0; k <= jp && k <= jz - 
i; k++) fw += PIo2[k] * q[
i + k];
 
  609      for (
i = jz; 
i >= 0; 
i--) fw += fq[
i];
 
  610      y[0] = (ih == 0) ? fw : -fw;
 
  615      for (
i = jz; 
i >= 0; 
i--) fw += fq[
i];
 
  616      y[0] = (ih == 0) ? fw : -fw;
 
  618      for (
i = 1; 
i <= jz; 
i++) fw += fq[
i];
 
  619      y[1] = (ih == 0) ? fw : -fw;
 
  622      for (
i = jz; 
i > 0; 
i--) {
 
  623        fw = fq[
i - 1] + fq[
i];
 
  624        fq[
i] += fq[
i - 1] - fw;
 
  627      for (
i = jz; 
i > 1; 
i--) {
 
  628        fw = fq[
i - 1] + fq[
i];
 
  629        fq[
i] += fq[
i - 1] - fw;
 
  632      for (fw = 0.0, 
i = jz; 
i >= 2; 
i--) fw += fq[
i];
 
  673V8_INLINE double __kernel_sin(
double x, 
double y, 
int iy) {
 
  675      half = 5.00000000000000000000e-01, 
 
  676      S1 = -1.66666666666666324348e-01,  
 
  677      S2 = 8.33333333332248946124e-03,   
 
  678      S3 = -1.98412698298579493134e-04,  
 
  679      S4 = 2.75573137070700676789e-06,   
 
  680      S5 = -2.50507602534068634195e-08,  
 
  681      S6 = 1.58969099521155010221e-10;   
 
  687  if (ix < 0x3E400000) { 
 
  688    if (
static_cast<int>(
x) == 0) 
return x;
 
  692  r = S2 + 
z * (S3 + 
z * (S4 + 
z * (S5 + 
z * 
S6)));
 
  694    return x + v * (S1 + 
z * 
r);
 
  696    return x - ((
z * (half * 
y - v * 
r) - 
y) - v * S1);
 
  733double __kernel_tan(
double x, 
double y, 
int iy) {
 
  734  static const double xxx[] = {
 
  735      3.33333333333334091986e-01,             
 
  736      1.33333333333201242699e-01,             
 
  737      5.39682539762260521377e-02,             
 
  738      2.18694882948595424599e-02,             
 
  739      8.86323982359930005737e-03,             
 
  740      3.59207910759131235356e-03,             
 
  741      1.45620945432529025516e-03,             
 
  742      5.88041240820264096874e-04,             
 
  743      2.46463134818469906812e-04,             
 
  744      7.81794442939557092300e-05,             
 
  745      7.14072491382608190305e-05,             
 
  746      -1.85586374855275456654e-05,            
 
  747      2.59073051863633712884e-05,             
 
  748       1.00000000000000000000e+00,   
 
  749       7.85398163397448278999e-01,  
 
  750       3.06161699786838301793e-17 
 
  754#define pio4lo xxx[15] 
  757  double z, 
r, v, w, 
s;
 
  761  ix = hx & 0x7FFFFFFF;             
 
  762  if (ix < 0x3E300000) {            
 
  763    if (
static_cast<int>(
x) == 0) { 
 
  766      if (((ix | low) | (iy + 1)) == 0) {
 
  767        return one / fabs(
x);
 
  780          return t + a * (s + t * v);
 
  785  if (ix >= 0x3FE59428) { 
 
  802  r = T[1] + w * (T[3] + w * (T[5] + w * (T[7] + w * (T[9] + w * T[11]))));
 
  804      (T[2] + w * (T[4] + w * (T[6] + w * (T[8] + w * (T[10] + w * T[12])))));
 
  806  r = 
y + 
z * (s * (
r + v) + 
y);
 
  809  if (ix >= 0x3FE59428) {
 
  811    return (1 - ((hx >> 30) & 2)) * (v - 2.0 * (
x - (w * w / (w + v) - 
r)));
 
  828    return t + a * (s + t * v);
 
  864      one = 1.00000000000000000000e+00,     
 
  865      pi = 3.14159265358979311600e+00,      
 
  866      pio2_hi = 1.57079632679489655800e+00, 
 
  867      pio2_lo = 6.12323399573676603587e-17, 
 
  868      pS0 = 1.66666666666666657415e-01,     
 
  869      pS1 = -3.25565818622400915405e-01,    
 
  870      pS2 = 2.01212532134862925881e-01,     
 
  871      pS3 = -4.00555345006794114027e-02,    
 
  872      pS4 = 7.91534994289814532176e-04,     
 
  873      pS5 = 3.47933107596021167570e-05,     
 
  874      qS1 = -2.40339491173441421878e+00,    
 
  875      qS2 = 2.02094576023350569471e+00,     
 
  876      qS3 = -6.88283971605453293030e-01,    
 
  877      qS4 = 7.70381505559019352791e-02;     
 
  879  double z, p, q, 
r, w, 
s, c, df;
 
  882  ix = hx & 0x7FFFFFFF;
 
  883  if (ix >= 0x3FF00000) { 
 
  886    if (((ix - 0x3FF00000) | lx) == 0) { 
 
  890        return pi + 2.0 * pio2_lo; 
 
  892    return std::numeric_limits<double>::signaling_NaN();  
 
  894  if (ix < 0x3FE00000) {                            
 
  895    if (ix <= 0x3C600000) 
return pio2_hi + pio2_lo; 
 
  897    p = 
z * (pS0 + 
z * (pS1 + 
z * (pS2 + 
z * (pS3 + 
z * (pS4 + 
z * pS5)))));
 
  898    q = 
one + 
z * (qS1 + 
z * (qS2 + 
z * (qS3 + 
z * qS4)));
 
  900    return pio2_hi - (
x - (pio2_lo - 
x * 
r));
 
  903    p = 
z * (pS0 + 
z * (pS1 + 
z * (pS2 + 
z * (pS3 + 
z * (pS4 + 
z * pS5)))));
 
  904    q = 
one + 
z * (qS1 + 
z * (qS2 + 
z * (qS3 + 
z * qS4)));
 
  908    return pi - 2.0 * (s + w);
 
  914    c = (
z - df * df) / (s + df);
 
  915    p = 
z * (pS0 + 
z * (pS1 + 
z * (pS2 + 
z * (pS3 + 
z * (pS4 + 
z * pS5)))));
 
  916    q = 
one + 
z * (qS1 + 
z * (qS2 + 
z * (qS3 + 
z * qS4)));
 
  919    return 2.0 * (df + w);
 
 
  939      ln2 = 6.93147180559945286227e-01; 
 
  944  if (hx < 0x3FF00000) { 
 
  945    return std::numeric_limits<double>::signaling_NaN();
 
  946  } 
else if (hx >= 0x41B00000) { 
 
  947    if (hx >= 0x7FF00000) {      
 
  952  } 
else if (((hx - 0x3FF00000) | lx) == 0) {
 
  954  } 
else if (hx > 0x40000000) { 
 
  959    return log1p(t + sqrt(2.0 * t + t * t));
 
 
  993      one = 1.00000000000000000000e+00, 
 
  995      pio2_hi = 1.57079632679489655800e+00, 
 
  996      pio2_lo = 6.12323399573676603587e-17, 
 
  997      pio4_hi = 7.85398163397448278999e-01, 
 
  999      pS0 = 1.66666666666666657415e-01,     
 
 1000      pS1 = -3.25565818622400915405e-01,    
 
 1001      pS2 = 2.01212532134862925881e-01,     
 
 1002      pS3 = -4.00555345006794114027e-02,    
 
 1003      pS4 = 7.91534994289814532176e-04,     
 
 1004      pS5 = 3.47933107596021167570e-05,     
 
 1005      qS1 = -2.40339491173441421878e+00,    
 
 1006      qS2 = 2.02094576023350569471e+00,     
 
 1007      qS3 = -6.88283971605453293030e-01,    
 
 1008      qS4 = 7.70381505559019352791e-02;     
 
 1010  double t, w, p, q, c, 
r, 
s;
 
 1015  ix = hx & 0x7FFFFFFF;
 
 1016  if (ix >= 0x3FF00000) { 
 
 1019    if (((ix - 0x3FF00000) | lx) == 0) { 
 
 1020      return x * pio2_hi + 
x * pio2_lo;
 
 1022    return std::numeric_limits<double>::signaling_NaN();  
 
 1023  } 
else if (ix < 0x3FE00000) {     
 
 1024    if (ix < 0x3E400000) {          
 
 1025      if (huge + 
x > 
one) 
return x; 
 
 1029    p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5)))));
 
 1030    q = 
one + t * (qS1 + t * (qS2 + t * (qS3 + t * qS4)));
 
 1037  p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 + t * (pS4 + t * pS5)))));
 
 1038  q = 
one + t * (qS1 + t * (qS2 + t * (qS3 + t * qS4)));
 
 1040  if (ix >= 0x3FEF3333) { 
 
 1042    t = pio2_hi - (2.0 * (s + s * w) - pio2_lo);
 
 1046    c = (t - w * w) / (s + w);
 
 1048    p = 2.0 * s * 
r - (pio2_lo - 2.0 * c);
 
 1049    q = pio4_hi - 2.0 * w;
 
 1050    t = pio4_hi - (p - q);
 
 
 1069      one = 1.00000000000000000000e+00, 
 
 1070      ln2 = 6.93147180559945286227e-01, 
 
 1071      huge = 1.00000000000000000000e+300;
 
 1076  ix = hx & 0x7FFFFFFF;
 
 1077  if (ix >= 0x7FF00000) 
return x + 
x; 
 
 1078  if (ix < 0x3E300000) {              
 
 1079    if (huge + 
x > 
one) 
return x;     
 
 1081  if (ix > 0x41B00000) { 
 
 1082    w = 
log(fabs(
x)) + ln2;
 
 1083  } 
else if (ix > 0x40000000) { 
 
 
 1117  static const double atanhi[] = {
 
 1118      4.63647609000806093515e-01, 
 
 1119      7.85398163397448278999e-01, 
 
 1120      9.82793723247329054082e-01, 
 
 1121      1.57079632679489655800e+00, 
 
 1124  static const double atanlo[] = {
 
 1125      2.26987774529616870924e-17, 
 
 1126      3.06161699786838301793e-17, 
 
 1127      1.39033110312309984516e-17, 
 
 1128      6.12323399573676603587e-17, 
 
 1131  static const double aT[] = {
 
 1132      3.33333333333329318027e-01,  
 
 1133      -1.99999999998764832476e-01, 
 
 1134      1.42857142725034663711e-01,  
 
 1135      -1.11111104054623557880e-01, 
 
 1136      9.09088713343650656196e-02,  
 
 1137      -7.69187620504482999495e-02, 
 
 1138      6.66107313738753120669e-02,  
 
 1139      -5.83357013379057348645e-02, 
 
 1140      4.97687799461593236017e-02,  
 
 1141      -3.65315727442169155270e-02, 
 
 1142      1.62858201153657823623e-02,  
 
 1145  static const double one = 1.0, huge = 1.0e300;
 
 1147  double w, s1, s2, 
z;
 
 1151  ix = hx & 0x7FFFFFFF;
 
 1152  if (ix >= 0x44100000) { 
 
 1155    if (ix > 0x7FF00000 || (ix == 0x7FF00000 && (low != 0)))
 
 1158      return atanhi[3] + *
const_cast<volatile double*
>(&atanlo[3]);
 
 1160      return -atanhi[3] - *
const_cast<volatile double*
>(&atanlo[3]);
 
 1162  if (ix < 0x3FDC0000) {            
 
 1163    if (ix < 0x3E400000) {          
 
 1164      if (huge + 
x > 
one) 
return x; 
 
 1169    if (ix < 0x3FF30000) {   
 
 1170      if (ix < 0x3FE60000) { 
 
 1172        x = (2.0 * 
x - 
one) / (2.0 + 
x);
 
 1178      if (ix < 0x40038000) { 
 
 1180        x = (
x - 1.5) / (
one + 1.5 * 
x);
 
 1192            w * (aT[2] + w * (aT[4] + w * (aT[6] + w * (aT[8] + w * aT[10])))));
 
 1193  s2 = w * (aT[1] + w * (aT[3] + w * (aT[5] + w * (aT[7] + w * aT[9]))));
 
 1195    return x - 
x * (s1 + s2);
 
 1197    z = atanhi[id] - ((
x * (s1 + s2) - atanlo[id]) - 
x);
 
 1198    return (hx < 0) ? -
z : 
z;
 
 
 1229  static volatile double tiny = 1.0e-300;
 
 1232      pi_o_4 = 7.8539816339744827900E-01, 
 
 1233      pi_o_2 = 1.5707963267948965580E+00, 
 
 1234      pi = 3.1415926535897931160E+00;     
 
 1235  static volatile double pi_lo =
 
 1236      1.2246467991473531772E-16; 
 
 1239  int32_t k, 
m, hx, hy, ix, iy;
 
 1243  ix = hx & 0x7FFFFFFF;
 
 1245  iy = hy & 0x7FFFFFFF;
 
 1250  if ((SubWithWraparound(hx, 0x3FF00000) | lx) == 0) {
 
 1253  m = ((hy >> 31) & 1) | ((hx >> 30) & 2);           
 
 1256  if ((iy | ly) == 0) {
 
 1268  if ((ix | lx) == 0) 
return (hy < 0) ? -pi_o_2 - tiny : pi_o_2 + tiny;
 
 1271  if (ix == 0x7FF00000) {
 
 1272    if (iy == 0x7FF00000) {
 
 1275          return pi_o_4 + tiny; 
 
 1277          return -pi_o_4 - tiny; 
 
 1279          return 3.0 * pi_o_4 + tiny; 
 
 1281          return -3.0 * pi_o_4 - tiny; 
 
 1297  if (iy == 0x7FF00000) 
return (hy < 0) ? -pi_o_2 - tiny : pi_o_2 + tiny;
 
 1300  k = (iy - ix) >> 20;
 
 1302    z = pi_o_2 + 0.5 * pi_lo;
 
 1304  } 
else if (hx < 0 && k < -60) {
 
 1315      return pi - (
z - pi_lo); 
 
 1317      return (
z - pi_lo) - pi; 
 
 
 1351#if defined(V8_USE_LIBM_TRIG_FUNCTIONS) 
 1352double fdlibm_cos(
double x) {
 
 1356  double y[2], 
z = 0.0;
 
 1364  if (ix <= 0x3FE921FB) {
 
 1365    return __kernel_cos(
x, 
z);
 
 1366  } 
else if (ix >= 0x7FF00000) {
 
 1371    n = __ieee754_rem_pio2(
x, 
y);
 
 1374        return __kernel_cos(
y[0], 
y[1]);
 
 1376        return -__kernel_sin(
y[0], 
y[1], 1);
 
 1378        return -__kernel_cos(
y[0], 
y[1]);
 
 1380        return __kernel_sin(
y[0], 
y[1], 1);
 
 
 1450      halF[2] = {0.5, -0.5},
 
 1451      o_threshold = 7.09782712893383973096e+02,  
 
 1452      u_threshold = -7.45133219101941108420e+02, 
 
 1453      ln2HI[2] = {6.93147180369123816490e-01,    
 
 1454                  -6.93147180369123816490e-01},  
 
 1455      ln2LO[2] = {1.90821492927058770002e-10,    
 
 1456                  -1.90821492927058770002e-10},  
 
 1457      invln2 = 1.44269504088896338700e+00,       
 
 1458      P1 = 1.66666666666666019037e-01,           
 
 1459      P2 = -2.77777777770155933842e-03,          
 
 1460      P3 = 6.61375632143793436117e-05,           
 
 1461      P4 = -1.65339022054652515390e-06,          
 
 1462      P5 = 4.13813679705723846039e-08,           
 
 1463      E = 2.718281828459045;                     
 
 1465  static volatile double 
 1467      twom1000 = 9.33263618503218878990e-302, 
 
 1468      two1023 = 8.988465674311579539e307;     
 
 1470  double y, hi = 0.0, lo = 0.0, c, t, twopk;
 
 1475  xsb = (hx >> 31) & 1; 
 
 1479  if (hx >= 0x40862E42) { 
 
 1480    if (hx >= 0x7FF00000) {
 
 1483      if (((hx & 0xFFFFF) | lx) != 0)
 
 1486        return (xsb == 0) ? 
x : 0.0; 
 
 1488    if (
x > o_threshold) 
return huge * huge;         
 
 1489    if (
x < u_threshold) 
return twom1000 * twom1000; 
 
 1493  if (hx > 0x3FD62E42) {   
 
 1494    if (hx < 0x3FF0A2B2) { 
 
 1499      if (
x == 1.0) 
return E;
 
 1500      hi = 
x - ln2HI[xsb];
 
 1504      k = 
static_cast<int>(invln2 * 
x + halF[xsb]);
 
 1506      hi = 
x - t * ln2HI[0]; 
 
 1510  } 
else if (hx < 0x3E300000) {         
 
 1511    if (huge + 
x > 
one) 
return one + 
x; 
 
 1521        0x3FF00000 + 
static_cast<int32_t
>(
static_cast<uint32_t
>(k) << 20), 0);
 
 1523    INSERT_WORDS(twopk, 0x3FF00000 + (
static_cast<uint32_t
>(k + 1000) << 20),
 
 1526  c = 
x - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
 
 1528    return one - ((
x * c) / (c - 2.0) - 
x);
 
 1530    y = 
one - ((lo - (
x * c) / (2.0 - c)) - hi);
 
 1533    if (k == 1024) 
return y * 2.0 * two1023;
 
 1536    return y * twopk * twom1000;
 
 
 1558  static const double one = 1.0, huge = 1e300;
 
 1559  static const double zero = 0.0;
 
 1565  ix = hx & 0x7FFFFFFF;
 
 1568    return std::numeric_limits<double>::signaling_NaN();
 
 1570  if (ix == 0x3FF00000) {
 
 1571    return x > 0 ? std::numeric_limits<double>::infinity()
 
 1572                 : -std::numeric_limits<double>::infinity();
 
 1574  if (ix < 0x3E300000 && (huge + 
x) > zero) 
return x; 
 
 1576  if (ix < 0x3FE00000) { 
 
 
 1640      ln2_hi = 6.93147180369123816490e-01, 
 
 1641      ln2_lo = 1.90821492927058770002e-10, 
 
 1642      two54 = 1.80143985094819840000e+16,  
 
 1643      Lg1 = 6.666666666666735130e-01,      
 
 1644      Lg2 = 3.999999999940941908e-01,      
 
 1645      Lg3 = 2.857142874366239149e-01,      
 
 1646      Lg4 = 2.222219843214978396e-01,      
 
 1647      Lg5 = 1.818357216161805012e-01,      
 
 1648      Lg6 = 1.531383769920937332e-01,      
 
 1649      Lg7 = 1.479819860511658591e-01;      
 
 1651  static const double zero = 0.0;
 
 1653  double hfsq, f, 
s, 
z, R, w, t1, t2, dk;
 
 1654  int32_t k, hx, 
i, j;
 
 1660  if (hx < 0x00100000) { 
 
 1661    if (((hx & 0x7FFFFFFF) | lx) == 0) {
 
 1662      return -std::numeric_limits<double>::infinity(); 
 
 1665      return std::numeric_limits<double>::signaling_NaN(); 
 
 1671  if (hx >= 0x7FF00000) 
return x + 
x;
 
 1672  k += (hx >> 20) - 1023;
 
 1674  i = (hx + 0x95F64) & 0x100000;
 
 1678  if ((0x000FFFFF & (2 + hx)) < 3) { 
 
 1683        dk = 
static_cast<double>(k);
 
 1684        return dk * ln2_hi + dk * ln2_lo;
 
 1687    R = f * f * (0.5 - 0.33333333333333333 * f);
 
 1691      dk = 
static_cast<double>(k);
 
 1692      return dk * ln2_hi - ((R - dk * ln2_lo) - f);
 
 1696  dk = 
static_cast<double>(k);
 
 1708      return f - (hfsq - s * (hfsq + R));
 
 1710      return dk * ln2_hi - ((hfsq - (s * (hfsq + R) + dk * ln2_lo)) - f);
 
 1713      return f - s * (f - R);
 
 1715      return dk * ln2_hi - ((s * (f - R) - dk * ln2_lo) - f);
 
 
 1785      ln2_hi = 6.93147180369123816490e-01, 
 
 1786      ln2_lo = 1.90821492927058770002e-10, 
 
 1787      two54 = 1.80143985094819840000e+16,  
 
 1788      Lp1 = 6.666666666666735130e-01,      
 
 1789      Lp2 = 3.999999999940941908e-01,      
 
 1790      Lp3 = 2.857142874366239149e-01,      
 
 1791      Lp4 = 2.222219843214978396e-01,      
 
 1792      Lp5 = 1.818357216161805012e-01,      
 
 1793      Lp6 = 1.531383769920937332e-01,      
 
 1794      Lp7 = 1.479819860511658591e-01;      
 
 1796  static const double zero = 0.0;
 
 1798  double hfsq, f, c, 
s, 
z, R, u;
 
 1799  int32_t k, hx, hu, ax;
 
 1802  ax = hx & 0x7FFFFFFF;
 
 1805  if (hx < 0x3FDA827A) {    
 
 1806    if (ax >= 0x3FF00000) { 
 
 1808        return -std::numeric_limits<double>::infinity(); 
 
 1810        return std::numeric_limits<double>::signaling_NaN();  
 
 1812    if (ax < 0x3E200000) {    
 
 1813      if (two54 + 
x > zero    
 
 1817        return x - 
x * 
x * 0.5;
 
 1819    if (hx > 0 || hx <= 
static_cast<int32_t
>(0xBFD2BEC4)) {
 
 1825  if (hx >= 0x7FF00000) 
return x + 
x;
 
 1827    if (hx < 0x43400000) {
 
 1830      k = (hu >> 20) - 1023;
 
 1831      c = (k > 0) ? 1.0 - (u - 
x) : 
x - (u - 1.0); 
 
 1836      k = (hu >> 20) - 1023;
 
 1852      hu = (0x00100000 - hu) >> 2;
 
 1863        return k * ln2_hi + c;
 
 1866    R = hfsq * (1.0 - 0.66666666666666666 * f);
 
 1870      return k * ln2_hi - ((R - (k * ln2_lo + c)) - f);
 
 1875           z * (Lp2 + 
z * (Lp3 + 
z * (Lp4 + 
z * (Lp5 + 
z * (Lp6 + 
z * Lp7))))));
 
 1877    return f - (hfsq - s * (hfsq + R));
 
 1879    return k * ln2_hi - ((hfsq - (s * (hfsq + R) + (k * ln2_lo + c))) - f);
 
 
 1939static const double Lg1 = 6.666666666666735130e-01, 
 
 1940    Lg2 = 3.999999999940941908e-01,                 
 
 1941    Lg3 = 2.857142874366239149e-01,                 
 
 1942    Lg4 = 2.222219843214978396e-01,                 
 
 1943    Lg5 = 1.818357216161805012e-01,                 
 
 1944    Lg6 = 1.531383769920937332e-01,                 
 
 1945    Lg7 = 1.479819860511658591e-01;                 
 
 1952  double hfsq, 
s, 
z, R, w, t1, t2;
 
 1961  return s * (hfsq + R);
 
 
 1975      two54 = 1.80143985094819840000e+16,   
 
 1976      ivln2hi = 1.44269504072144627571e+00, 
 
 1977      ivln2lo = 1.67517131648865118353e-10; 
 
 1979  double f, hfsq, hi, lo, 
r, val_hi, val_lo, w, 
y;
 
 1986  if (hx < 0x00100000) { 
 
 1987    if (((hx & 0x7FFFFFFF) | lx) == 0) {
 
 1988      return -std::numeric_limits<double>::infinity(); 
 
 1991      return std::numeric_limits<double>::signaling_NaN(); 
 
 1997  if (hx >= 0x7FF00000) 
return x + 
x;
 
 1998  if (hx == 0x3FF00000 && lx == 0) 
return 0.0; 
 
 1999  k += (hx >> 20) - 1023;
 
 2001  i = (hx + 0x95F64) & 0x100000;
 
 2004  y = 
static_cast<double>(k);
 
 2040  SET_LOW_WORD(hi, 0);
 
 2041  lo = (f - hi) - hfsq + 
r;
 
 2042  val_hi = hi * ivln2hi;
 
 2043  val_lo = (lo + hi) * ivln2lo + lo * ivln2hi;
 
 2047  val_lo += (
y - w) + val_hi;
 
 2050  return val_lo + val_hi;
 
 
 2081      two54 = 1.80143985094819840000e+16, 
 
 2082      ivln10 = 4.34294481903251816668e-01,
 
 2083      log10_2hi = 3.01029995663611771306e-01, 
 
 2084      log10_2lo = 3.69423907715893078616e-13; 
 
 2093  if (hx < 0x00100000) { 
 
 2094    if (((hx & 0x7FFFFFFF) | lx) == 0) {
 
 2095      return -std::numeric_limits<double>::infinity(); 
 
 2098      return std::numeric_limits<double>::quiet_NaN(); 
 
 2105  if (hx >= 0x7FF00000) 
return x + 
x;
 
 2106  if (hx == 0x3FF00000 && lx == 0) 
return 0.0; 
 
 2107  k += (hx >> 20) - 1023;
 
 2109  i = (k & 0x80000000) >> 31;
 
 2110  hx = (hx & 0x000FFFFF) | ((0x3FF - 
i) << 20);
 
 2113  SET_LOW_WORD(
x, lx);
 
 2115  double z = 
y * log10_2lo + ivln10 * 
log(
x);
 
 2116  return z + 
y * log10_2hi;
 
 
 2217      o_threshold = 7.09782712893383973096e+02, 
 
 2218      ln2_hi = 6.93147180369123816490e-01,      
 
 2219      ln2_lo = 1.90821492927058770002e-10,      
 
 2220      invln2 = 1.44269504088896338700e+00,      
 
 2223      Q1 = -3.33333333333331316428e-02, 
 
 2224      Q2 = 1.58730158725481460165e-03,  
 
 2225      Q3 = -7.93650757867487942473e-05, 
 
 2226      Q4 = 4.00821782732936239552e-06,  
 
 2227      Q5 = -2.01099218183624371326e-07; 
 
 2229  static volatile double huge = 1.0e+300;
 
 2231  double y, hi, lo, c, t, e, hxs, hfx, r1, twopk;
 
 2236  xsb = hx & 0x80000000; 
 
 2240  if (hx >= 0x4043687A) {   
 
 2241    if (hx >= 0x40862E42) { 
 
 2242      if (hx >= 0x7FF00000) {
 
 2245        if (((hx & 0xFFFFF) | low) != 0)
 
 2248          return (xsb == 0) ? 
x : -1.0; 
 
 2250      if (
x > o_threshold) 
return huge * huge; 
 
 2259  if (hx > 0x3FD62E42) {   
 
 2260    if (hx < 0x3FF0A2B2) { 
 
 2271      k = invln2 * 
x + ((xsb == 0) ? 0.5 : -0.5);
 
 2273      hi = 
x - t * ln2_hi; 
 
 2278  } 
else if (hx < 0x3C900000) { 
 
 2280    return x - (t - (huge + 
x));
 
 2288  r1 = 
one + hxs * (Q1 + hxs * (Q2 + hxs * (Q3 + hxs * (Q4 + hxs * Q5))));
 
 2290  e = hxs * ((r1 - t) / (6.0 - 
x * t));
 
 2292    return x - (
x * e - hxs); 
 
 2296        0x3FF00000 + 
static_cast<int32_t
>(
static_cast<uint32_t
>(k) << 20),
 
 2298    e = (
x * (e - c) - c);
 
 2300    if (k == -1) 
return 0.5 * (
x - e) - 0.5;
 
 2303        return -2.0 * (e - (
x + 0.5));
 
 2305        return one + 2.0 * (
x - e);
 
 2307    if (k <= -2 || k > 56) { 
 
 2313        y = 
y * 2.0 * 8.98846567431158e+307;
 
 
 2334  static const uint32_t
 
 2339  static const double P0 = 1.87595182427177009643, 
 
 2340      P1 = -1.88497979543377169875,                
 
 2341      P2 = 1.621429720105354466140,                
 
 2342      P3 = -0.758397934778766047437,               
 
 2343      P4 = 0.145996192886612446982;                
 
 2346  double r, 
s, t = 0.0, w;
 
 2351  sign = hx & 0x80000000; 
 
 2353  if (hx >= 0x7FF00000) 
return (
x + 
x); 
 
 2370  if (hx < 0x00100000) {             
 
 2371    if ((hx | low) == 0) 
return (
x); 
 
 2375    INSERT_WORDS(t, sign | ((high & 0x7FFFFFFF) / 3 + B2), 0);
 
 2390  r = (t * t) * (t / 
x);
 
 2391  t = t * ((P0 + 
r * (P1 + 
r * P2)) + ((
r * 
r) * 
r) * (P3 + 
r * P4));
 
 2404  bits = (bits + 0x80000000) & 0xFFFFFFFFC0000000ULL;
 
 2411  r = (
r - t) / (w + 
r); 
 
 
 2447#if defined(V8_USE_LIBM_TRIG_FUNCTIONS) 
 2448double fdlibm_sin(
double x) {
 
 2452  double y[2], 
z = 0.0;
 
 2460  if (ix <= 0x3FE921FB) {
 
 2461    return __kernel_sin(
x, 
z, 0);
 
 2462  } 
else if (ix >= 0x7FF00000) {
 
 2467    n = __ieee754_rem_pio2(
x, 
y);
 
 2470        return __kernel_sin(
y[0], 
y[1], 1);
 
 2472        return __kernel_cos(
y[0], 
y[1]);
 
 2474        return -__kernel_sin(
y[0], 
y[1], 1);
 
 2476        return -__kernel_cos(
y[0], 
y[1]);
 
 
 2511  double y[2], 
z = 0.0;
 
 2519  if (ix <= 0x3FE921FB) {
 
 2520    return __kernel_tan(
x, 
z, 1);
 
 2521  } 
else if (ix >= 0x7FF00000) {
 
 2526    n = __ieee754_rem_pio2(
x, 
y);
 
 2528    return __kernel_tan(
y[0], 
y[1], 1 - ((n & 1) << 1));
 
 
 2555  static const double KCOSH_OVERFLOW = 710.4758600739439;
 
 2556  static const double one = 1.0, half = 0.5;
 
 2557  static volatile double huge = 1.0e+300;
 
 2566  if (ix < 0x3FD62E43) {
 
 2567    double t = 
expm1(fabs(
x));
 
 2570    if (ix < 0x3C800000) 
return w;
 
 2571    return one + (t * t) / (w + w);
 
 2575  if (ix < 0x40360000) {
 
 2576    double t = 
exp(fabs(
x));
 
 2577    return half * t + half / t;
 
 2581  if (ix < 0x40862E42) 
return half * 
exp(fabs(
x));
 
 2584  if (fabs(
x) <= KCOSH_OVERFLOW) {
 
 2585    double w = 
exp(half * fabs(
x));
 
 2586    double t = half * w;
 
 2591  if (ix >= 0x7FF00000) 
return x * 
x;
 
 
 2649      dp_h[] = {0.0, 5.84962487220764160156e-01},  
 
 2650      dp_l[] = {0.0, 1.35003920212974897128e-08},  
 
 2651      zero = 0.0, 
one = 1.0, two = 2.0,
 
 2652      two53 = 9007199254740992.0,  
 
 2653      huge = 1.0e300, tiny = 1.0e-300,
 
 2655      L1 = 5.99999999999994648725e-01,      
 
 2656      L2 = 4.28571428578550184252e-01,      
 
 2657      L3 = 3.33333329818377432918e-01,      
 
 2658      L4 = 2.72728123808534006489e-01,      
 
 2659      L5 = 2.30660745775561754067e-01,      
 
 2660      L6 = 2.06975017800338417784e-01,      
 
 2661      P1 = 1.66666666666666019037e-01,      
 
 2662      P2 = -2.77777777770155933842e-03,     
 
 2663      P3 = 6.61375632143793436117e-05,      
 
 2664      P4 = -1.65339022054652515390e-06,     
 
 2665      P5 = 4.13813679705723846039e-08,      
 
 2666      lg2 = 6.93147180559945286227e-01,     
 
 2667      lg2_h = 6.93147182464599609375e-01,   
 
 2668      lg2_l = -1.90465429995776804525e-09,  
 
 2669      ovt = 8.0085662595372944372e-0017,    
 
 2670      cp = 9.61796693925975554329e-01,      
 
 2671      cp_h = 9.61796700954437255859e-01,    
 
 2672      cp_l = -7.02846165095275826516e-09,   
 
 2673      ivln2 = 1.44269504088896338700e+00,   
 
 2675          1.44269502162933349609e+00,  
 
 2677          1.92596299112661746887e-08;  
 
 2679  double z, ax, z_h, z_l, p_h, p_l;
 
 2680  double y1, t1, t2, 
r, 
s, t, u, v, w;
 
 2681  int i, j, k, yisint, 
n;
 
 2687  ix = hx & 0x7fffffff;
 
 2688  iy = hy & 0x7fffffff;
 
 2691  if ((iy | ly) == 0) 
return one;
 
 2694  if (ix > 0x7ff00000 || ((ix == 0x7ff00000) && (lx != 0)) || iy > 0x7ff00000 ||
 
 2695      ((iy == 0x7ff00000) && (ly != 0))) {
 
 2706    if (iy >= 0x43400000) {
 
 2708    } 
else if (iy >= 0x3ff00000) {
 
 2709      k = (iy >> 20) - 0x3ff; 
 
 2712        if ((j << (52 - k)) == 
static_cast<int>(ly)) yisint = 2 - (j & 1);
 
 2713      } 
else if (ly == 0) {
 
 2715        if ((j << (20 - k)) == iy) yisint = 2 - (j & 1);
 
 2722    if (iy == 0x7ff00000) { 
 
 2723      if (((ix - 0x3ff00000) | lx) == 0) {
 
 2725      } 
else if (ix >= 0x3ff00000) { 
 
 2726        return (hy >= 0) ? 
y : zero;
 
 2728        return (hy < 0) ? -
y : zero;
 
 2731    if (iy == 0x3ff00000) { 
 
 2738    if (hy == 0x40000000) 
return x * 
x; 
 
 2739    if (hy == 0x3fe00000) {             
 
 2749    if (ix == 0x7ff00000 || ix == 0 || ix == 0x3ff00000) {
 
 2753        if (((ix - 0x3ff00000) | yisint) == 0) {
 
 2755          z = std::numeric_limits<double>::signaling_NaN();
 
 2756        } 
else if (yisint == 1) {
 
 2767  if ((n | yisint) == 0) {
 
 2768    return std::numeric_limits<double>::signaling_NaN();
 
 2772  if ((n | (yisint - 1)) == 0) s = -
one; 
 
 2775  if (iy > 0x41e00000) {   
 
 2776    if (iy > 0x43f00000) { 
 
 2777      if (ix <= 0x3fefffff) 
return (hy < 0) ? huge * huge : tiny * tiny;
 
 2778      if (ix >= 0x3ff00000) 
return (hy > 0) ? huge * huge : tiny * tiny;
 
 2781    if (ix < 0x3fefffff) 
return (hy < 0) ? s * huge * huge : s * tiny * tiny;
 
 2782    if (ix > 0x3ff00000) 
return (hy > 0) ? s * huge * huge : s * tiny * tiny;
 
 2786    w = (t * t) * (0.5 - t * (0.3333333333333333333333 - t * 0.25));
 
 2788    v = t * ivln2_l - w * ivln2;
 
 2790    SET_LOW_WORD(t1, 0);
 
 2793    double ss, s2, s_h, s_l, t_h, t_l;
 
 2796    if (ix < 0x00100000) {
 
 2801    n += ((ix) >> 20) - 0x3ff;
 
 2802    j = ix & 0x000fffff;
 
 2804    ix = j | 0x3ff00000; 
 
 2807    } 
else if (j < 0xBB67A) {
 
 2821    SET_LOW_WORD(s_h, 0);
 
 2824    SET_HIGH_WORD(t_h, ((ix >> 1) | 0x20000000) + 0x00080000 + (k << 18));
 
 2825    t_l = ax - (t_h - bp[k]);
 
 2826    s_l = v * ((u - s_h * t_h) - s_h * t_l);
 
 2830        (L1 + s2 * (L2 + s2 * (L3 + s2 * (L4 + s2 * (L5 + s2 * L6)))));
 
 2831    r += s_l * (s_h + ss);
 
 2834    SET_LOW_WORD(t_h, 0);
 
 2835    t_l = 
r - ((t_h - 3.0) - s2);
 
 2838    v = s_l * t_h + t_l * ss;
 
 2841    SET_LOW_WORD(p_h, 0);
 
 2842    p_l = v - (p_h - u);
 
 2844    z_l = cp_l * p_h + p_l * cp + dp_l[k];
 
 2846    t = 
static_cast<double>(
n);
 
 2847    t1 = (((z_h + z_l) + dp_h[k]) + t);
 
 2848    SET_LOW_WORD(t1, 0);
 
 2849    t2 = z_l - (((t1 - t) - dp_h[k]) - z_h);
 
 2854  SET_LOW_WORD(y1, 0);
 
 2855  p_l = (
y - y1) * t1 + 
y * t2;
 
 2859  if (j >= 0x40900000) {               
 
 2860    if (((j - 0x40900000) | 
i) != 0) { 
 
 2861      return s * huge * huge;          
 
 2863      if (p_l + ovt > 
z - p_h) 
return s * huge * huge; 
 
 2865  } 
else if ((j & 0x7fffffff) >= 0x4090cc00) { 
 
 2866    if (((j - 0xc090cc00) | 
i) != 0) {         
 
 2867      return s * tiny * tiny;                  
 
 2869      if (p_l <= 
z - p_h) 
return s * tiny * tiny; 
 
 2876  k = (
i >> 20) - 0x3ff;
 
 2878  if (
i > 0x3fe00000) { 
 
 2879    n = j + (0x00100000 >> (k + 1));
 
 2880    k = ((n & 0x7fffffff) >> 20) - 0x3ff; 
 
 2883    n = ((n & 0x000fffff) | 0x00100000) >> (20 - k);
 
 2890  v = (p_l - (t - p_h)) * lg2 + t * lg2_l;
 
 2894  t1 = 
z - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
 
 2898  j += 
static_cast<int>(
static_cast<uint32_t
>(
n) << 20);
 
 2899  if ((j >> 20) <= 0) {
 
 2904    SET_HIGH_WORD(
z, tmp + 
static_cast<int>(
static_cast<uint32_t
>(n) << 20));
 
 
 
 2931  static const double KSINH_OVERFLOW = 710.4758600739439,
 
 2933                          3.725290298461914e-9,  
 
 2934      LOG_MAXD = 709.7822265625;  
 
 2935  static const double shuge = 1.0e307;
 
 2937  double h = (
x < 0) ? -0.5 : 0.5;
 
 2939  double ax = fabs(
x);
 
 2942    if (ax < TWO_M28) 
return x;
 
 2943    double t = 
expm1(ax);
 
 2945      return h * (2 * t - t * t / (t + 1));
 
 2947    return h * (t + t / (t + 1));
 
 2950  if (ax < LOG_MAXD) 
return h * 
exp(ax);
 
 2953  if (ax <= KSINH_OVERFLOW) {
 
 2954    double w = 
exp(0.5 * ax);
 
 
 2987  static const volatile double tiny = 1.0e-300;
 
 2988  static const double one = 1.0, two = 2.0, huge = 1.0e300;
 
 2993  ix = jx & 0x7FFFFFFF;
 
 2996  if (ix >= 0x7FF00000) {
 
 3004  if (ix < 0x40360000) {            
 
 3005    if (ix < 0x3E300000) {          
 
 3006      if (huge + 
x > 
one) 
return x; 
 
 3008    if (ix >= 0x3FF00000) { 
 
 3009      t = 
expm1(two * fabs(
x));
 
 3010      z = 
one - two / (t + two);
 
 3012      t = 
expm1(-two * fabs(
x));
 
 3019  return (jx >= 0) ? 
z : -
z;
 
 
 3029#if defined(V8_USE_LIBM_TRIG_FUNCTIONS) && defined(BUILDING_V8_BASE_SHARED) 
 3030double libm_sin(
double x) { 
return glibc_sin(
x); }
 
 3031double libm_cos(
double x) { 
return glibc_cos(
x); }