Both IEEE-754 2008 and ISO/IEC TS 18661-4 define the half-cycle trignometric functions cospi, sinpi, and tanpi. The attached patch implements cospi[fl], sinpi[fl], and tanpi[fl]. Limited testing on the cospi and sinpi reveal a max ULP less than 0.89; while tanpi is more problematic with a max ULP less than 2.01 in the interval [0,0.5]. The algorithms used in these functions are documented in {ks}_cospi.c, {ks}_sinpi.c, and s_tanpi.c. Note. I no longer have access to a system with ld128 and adequate support to compile and test the ld128 implementations of these functions. Given the almost complete lack of input from others on improvements to libm, I doubt that anyone cares. If someone does care, the ld128 files contain a number of FIXME comments, and in particular, while the polynomial coefficients are given I did not update the polynomial algorithms to properly use the coefficients. PR: 218514 MFC after: 2 weeks
320 lines
2.9 KiB
Plaintext
320 lines
2.9 KiB
Plaintext
/*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
/* 7.0-CURRENT */
|
|
FBSD_1.0 {
|
|
__fe_dfl_env;
|
|
tgamma;
|
|
acos;
|
|
acosf;
|
|
acosh;
|
|
acoshf;
|
|
asin;
|
|
asinf;
|
|
atan2;
|
|
atan2f;
|
|
atanh;
|
|
atanhf;
|
|
cosh;
|
|
coshf;
|
|
exp;
|
|
expf;
|
|
fmod;
|
|
fmodf;
|
|
gamma;
|
|
gamma_r;
|
|
gammaf;
|
|
gammaf_r;
|
|
hypot;
|
|
hypotf;
|
|
j0;
|
|
y0;
|
|
j0f;
|
|
y0f;
|
|
j1;
|
|
y1;
|
|
j1f;
|
|
y1f;
|
|
jn;
|
|
yn;
|
|
jnf;
|
|
ynf;
|
|
lgamma;
|
|
lgamma_r;
|
|
lgammaf;
|
|
lgammaf_r;
|
|
log;
|
|
log10;
|
|
log10f;
|
|
logf;
|
|
pow;
|
|
powf;
|
|
remainder;
|
|
remainderf;
|
|
scalb;
|
|
scalbf;
|
|
sinh;
|
|
sinhf;
|
|
sqrt;
|
|
sqrtf;
|
|
asinh;
|
|
asinhf;
|
|
atan;
|
|
atanf;
|
|
cbrt;
|
|
cbrtf;
|
|
ceil;
|
|
ceilf;
|
|
ceill;
|
|
cimag;
|
|
cimagf;
|
|
cimagl;
|
|
conj;
|
|
conjf;
|
|
conjl;
|
|
copysign;
|
|
copysignf;
|
|
copysignl;
|
|
cos;
|
|
cosf;
|
|
creal;
|
|
crealf;
|
|
creall;
|
|
erf;
|
|
erfc;
|
|
erff;
|
|
erfcf;
|
|
exp2;
|
|
exp2f;
|
|
expm1;
|
|
expm1f;
|
|
fabs;
|
|
fabsf;
|
|
fabsl;
|
|
fdim;
|
|
fdimf;
|
|
fdiml;
|
|
finite;
|
|
finitef;
|
|
floor;
|
|
floorf;
|
|
floorl;
|
|
fma;
|
|
fmaf;
|
|
fmal;
|
|
fmax;
|
|
fmaxf;
|
|
fmaxl;
|
|
fmin;
|
|
fminf;
|
|
fminl;
|
|
frexp;
|
|
frexpf;
|
|
frexpl;
|
|
ilogb;
|
|
ilogbf;
|
|
ilogbl;
|
|
__isfinite;
|
|
__isfinitef;
|
|
__isfinitel;
|
|
isnanf;
|
|
__isnanl;
|
|
__isnormal;
|
|
__isnormalf;
|
|
__isnormall;
|
|
llrint;
|
|
llrintf;
|
|
llround;
|
|
llroundf;
|
|
llroundl;
|
|
log1p;
|
|
log1pf;
|
|
logb;
|
|
logbf;
|
|
lrint;
|
|
lrintf;
|
|
lround;
|
|
lroundf;
|
|
lroundl;
|
|
modff;
|
|
modfl;
|
|
nearbyint;
|
|
nearbyintf;
|
|
nextafter;
|
|
nexttoward;
|
|
nexttowardl;
|
|
nextafterl;
|
|
nextafterf;
|
|
nexttowardf;
|
|
remquo;
|
|
remquof;
|
|
rint;
|
|
rintf;
|
|
round;
|
|
roundf;
|
|
roundl;
|
|
scalbln;
|
|
scalblnf;
|
|
scalblnl;
|
|
scalbn;
|
|
scalbnl;
|
|
scalbnf;
|
|
ldexpf;
|
|
ldexpl;
|
|
__signbit;
|
|
__signbitf;
|
|
__signbitl;
|
|
signgam;
|
|
significand;
|
|
significandf;
|
|
sin;
|
|
sinf;
|
|
tan;
|
|
tanf;
|
|
tanh;
|
|
tanhf;
|
|
trunc;
|
|
truncf;
|
|
truncl;
|
|
cabs;
|
|
cabsf;
|
|
drem;
|
|
dremf;
|
|
};
|
|
|
|
/* First added in 8.0-CURRENT */
|
|
FBSD_1.1 {
|
|
carg;
|
|
cargf;
|
|
csqrt;
|
|
csqrtf;
|
|
logbl;
|
|
nan;
|
|
nanf;
|
|
nanl;
|
|
llrintl;
|
|
lrintl;
|
|
nearbyintl;
|
|
rintl;
|
|
exp2l;
|
|
sinl;
|
|
cosl;
|
|
tanl;
|
|
tgammaf;
|
|
sqrtl;
|
|
hypotl;
|
|
cabsl;
|
|
csqrtl;
|
|
remquol;
|
|
remainderl;
|
|
fmodl;
|
|
acosl;
|
|
asinl;
|
|
atan2l;
|
|
atanl;
|
|
cargl;
|
|
cproj;
|
|
cprojf;
|
|
cprojl;
|
|
};
|
|
|
|
/* First added in 9.0-CURRENT */
|
|
FBSD_1.2 {
|
|
__isnanf;
|
|
cbrtl;
|
|
cexp;
|
|
cexpf;
|
|
log2;
|
|
log2f;
|
|
};
|
|
|
|
/* First added in 10.0-CURRENT */
|
|
FBSD_1.3 {
|
|
feclearexcept;
|
|
fegetexceptflag;
|
|
fetestexcept;
|
|
fegetround;
|
|
fesetround;
|
|
fesetenv;
|
|
acoshl;
|
|
asinhl;
|
|
atanhl;
|
|
cacos;
|
|
cacosf;
|
|
cacosh;
|
|
cacoshf;
|
|
casin;
|
|
casinf;
|
|
casinh;
|
|
casinhf;
|
|
catan;
|
|
catanf;
|
|
catanh;
|
|
catanhf;
|
|
csin;
|
|
csinf;
|
|
csinh;
|
|
csinhf;
|
|
ccos;
|
|
ccosf;
|
|
ccosh;
|
|
ccoshf;
|
|
coshl;
|
|
ctan;
|
|
ctanf;
|
|
ctanh;
|
|
ctanhf;
|
|
erfcl;
|
|
erfl;
|
|
expl;
|
|
expm1l;
|
|
lgammal;
|
|
log10l;
|
|
log1pl;
|
|
log2l;
|
|
logl;
|
|
powl;
|
|
sinhl;
|
|
tanhl;
|
|
/* Implemented as weak aliases for imprecise versions */
|
|
tgammal;
|
|
};
|
|
|
|
/* First added in 11.0-CURRENT */
|
|
FBSD_1.4 {
|
|
lgammal_r;
|
|
};
|
|
|
|
/* First added in 12.0-CURRENT */
|
|
FBSD_1.5 {
|
|
cacoshl;
|
|
cacosl;
|
|
casinhl;
|
|
casinl;
|
|
catanl;
|
|
catanhl;
|
|
clog;
|
|
clogf;
|
|
clogl;
|
|
cpow;
|
|
cpowf;
|
|
cpowl;
|
|
sincos;
|
|
sincosf;
|
|
sincosl;
|
|
};
|
|
|
|
/* First added in 14.0-CURRENT */
|
|
FBSD_1.7 {
|
|
cospi;
|
|
cospif;
|
|
cospil;
|
|
sinpi;
|
|
sinpif;
|
|
sinpil;
|
|
tanpi;
|
|
tanpif;
|
|
tanpil;
|
|
};
|