11.1Schristos/* From: @(#)k_sin.c 1.3 95/01/18 */ 21.1Schristos/* 31.1Schristos * ==================================================== 41.1Schristos * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 51.1Schristos * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans. 61.1Schristos * 71.1Schristos * Developed at SunSoft, a Sun Microsystems, Inc. business. 81.1Schristos * Permission to use, copy, modify, and distribute this 91.1Schristos * software is freely granted, provided that this notice 101.1Schristos * is preserved. 111.1Schristos * ==================================================== 121.1Schristos */ 131.1Schristos 141.1Schristos#include <sys/cdefs.h> 151.1Schristos/* 161.1Schristos * ld128 version of k_sin.c. See ../src/k_sin.c for most comments. 171.1Schristos */ 181.1Schristos 191.1Schristos#include "math_private.h" 201.1Schristos 211.1Schristosstatic const double 221.1Schristoshalf = 0.5; 231.1Schristos 241.1Schristos/* 251.1Schristos * Domain [-0.7854, 0.7854], range ~[-1.53e-37, 1.659e-37] 261.1Schristos * |sin(x)/x - s(x)| < 2**-122.1 271.1Schristos * 281.1Schristos * See ../ld80/k_cosl.c for more details about the polynomial. 291.1Schristos */ 301.1Schristosstatic const long double 311.1SchristosS1 = -0.16666666666666666666666666666666666606732416116558L, 321.1SchristosS2 = 0.0083333333333333333333333333333331135404851288270047L, 331.1SchristosS3 = -0.00019841269841269841269841269839935785325638310428717L, 341.1SchristosS4 = 0.27557319223985890652557316053039946268333231205686e-5L, 351.1SchristosS5 = -0.25052108385441718775048214826384312253862930064745e-7L, 361.1SchristosS6 = 0.16059043836821614596571832194524392581082444805729e-9L, 371.1SchristosS7 = -0.76471637318198151807063387954939213287488216303768e-12L, 381.1SchristosS8 = 0.28114572543451292625024967174638477283187397621303e-14L; 391.1Schristos 401.1Schristosstatic const double 411.1SchristosS9 = -0.82206352458348947812512122163446202498005154296863e-17, 421.1SchristosS10 = 0.19572940011906109418080609928334380560135358385256e-19, 431.1SchristosS11 = -0.38680813379701966970673724299207480965452616911420e-22, 441.1SchristosS12 = 0.64038150078671872796678569586315881020659912139412e-25; 451.1Schristos 461.1Schristoslong double 471.1Schristos__kernel_sinl(long double x, long double y, int iy) 481.1Schristos{ 491.1Schristos long double z,r,v; 501.1Schristos 511.1Schristos z = x*x; 521.1Schristos v = z*x; 531.1Schristos r = S2+z*(S3+z*(S4+z*(S5+z*(S6+z*(S7+z*(S8+ 541.1Schristos z*(S9+z*(S10+z*(S11+z*S12))))))))); 551.1Schristos if(iy==0) return x+v*(S1+z*r); 561.1Schristos else return x-((z*(half*y-v*r)-y)-v*S1); 571.1Schristos} 58