Known Maximum Errors in Math Functions

This section lists the known errors of the functions in the math library. Errors are measured in "units of the last place". This is a measure for the relative error. For a number z with the representation d.d…d*2^e (we assume IEEE floating-point numbers with base 2) the ULP is represented by

|d.d...d - (z / 2^e)| / 2^(p - 1)

where p is the number of bits in the mantissa of the floating-point number representation. Ideally the error for all functions is always less than 0.5ulps. Using rounding bits this is also possible and normally implemented for the basic operations. To achieve the same for the complex math functions requires a lot more work and this was not spend so far.

Therefore many of the functions in the math library have errors. The table lists the maximum error for each function which is exposed by one of the existing tests in the test suite. It is tried to cover as much as possible and really list the maximum error (or at least a ballpark figure) but this is often not achieved due to the large search space.

The table lists the ULP values for different architectures. Different architectures have different results since their hardware support for floating-point operations varies and also the existing hardware support is different.

Function alpha/fpu arm Generic ix86 ia64/fpu m68k/fpu mips/fpu powerpc/fpu sparc/sparc32/fpu sparc/sparc64/fpu sh/sh4/fpu s390/fpu
acosf - - - - - - - - - - - -
acos - - - - - - - - - - - -
acosl - - - 1150 - 1 - - - 1 - -
acoshf - - - - - - - - - - - -
acosh - - - - - - - - - - - -
acoshl - - - 1 - 1 - - - - - -
asinf 2 2 - - - - 2 2 2 2 2 2
asin 1 1 - 1 1 1 1 1 1 1 1 1
asinl - - - 1 1 1 - - - - - -
asinhf - - - - - - - - - - - -
asinh - - - - 1 - - - - - - -
asinhl - - - 656 656 14 - - - - - -
atanf - - - - - - - - - - - -
atan - - - - - - - - - - - -
atanl - - - 549 - - - - - 1 - -
atanhf - - - - - - - - - - - -
atanh 1 1 - 1 1 1 1 1 1 1 1 1
atanhl - - - 1605 1605 - - - - - - -
atan2f 4 - - - - - 4 4 4.0000 4 4 4
atan2 - - - - - - - - - - - -
atan2l - - - 549 - - - - - 1 - -
cabsf 1 1 - 1 1 1 1 1 1 1 1 1
cabs 1 1 - 1 1 - 1 1 1 1 1 1
cabsl - - - 560 560 1 - - - - - -
cacosf 1 + i 1 1 + i 1 - 1 + i 2 1 + i 2 1 + i 2 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
cacos 1 + i 0 1 + i 0 - 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
cacosl - - - 151 + i 329 151 + i 329 1 + i 1 - - - 0 + i 3 - -
cacoshf 7 + i 3 7 + i 3 - 4 + i 4 7 + i 3 7 + i 0 7 + i 3 7 + i 3 7 + i 3 7 + i 3 7 + i 3 7 + i 3
cacosh 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
cacoshl - - - 328 + i 151 328 + i 151 6 + i 2 - - - 5 + i 1 - -
cargf - - - - - - - - - - - -
carg - - - - - - - - - - - -
cargl - - - - - - - - - - - -
casinf 2 + i 1 2 + i 1 - 2 + i 2 2 + i 2 2 + i 2 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
casin 3 + i 0 3 + i 0 - 3 + i 0 3 + i 0 3 + i 0 3 + i 0 3 + i 0 3 + i 0 3 + i 0 3 + i 0 3 + i 0
casinl - - - 603 + i 329 603 + i 329 1 + i 1 - - - 1 + i 3 - -
casinhf 1 + i 6 1 + i 6 - 1 + i 6 1 + i 6 19 + i 2 1 + i 6 1 + i 6 1 + i 6 1 + i 6 1 + i 6 1 + i 6
casinh 5 + i 3 5 + i 3 - 5 + i 3 5 + i 3 6 + i 13 5 + i 3 5 + i 3 5 + i 3 5 + i 3 5 + i 3 5 + i 3
casinhl - - - 892 + i 12 892 + i 12 6 + i 7 - - - 4 + i 2 - -
catanf 4 + i 1 4 + i 1 - 0 + i 1 4 + i 1 0 + i 1 4 + i 1 4 + i 1 4 + i 1 4 + i 1 4 + i 1 4 + i 1
catan 0 + i 1 0 + i 1 - 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
catanl - - - 251 + i 474 251 + i 474 1 + i 7 - - - 0 + i 1 - -
catanhf 1 + i 6 1 + i 6 - 1 + i 0 0 + i 6 - 1 + i 6 0 + i 6 1 + i 6 1 + i 6 1 + i 6 1 + i 6
catanh 4 + i 1 4 + i 1 - 2 + i 0 4 + i 1 - 4 + i 1 4 + i 1 4 + i 1 4 + i 1 4 + i 1 4 + i 1
catanhl - - - 66 + i 447 66 + i 447 2 + i 2 - - - - - -
cbrtf - - - - - - - - - - - -
cbrt 1 1 - 1 1 1 1 1 1 1 1 1
cbrtl - - - 716 - 948 - - - - - -
ccosf 0 + i 1 0 + i 1 - 1 + i 1 1 + i 1 1 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
ccos 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1 0 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
ccosl - - - 5 + i 1901 5 + i 1901 0 + i 1 - - - - - -
ccoshf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1 3 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
ccosh 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
ccoshl - - - 1467 + i 1183 1467 + i 1183 1 + i 2 - - - - - -
ceilf - - - - - - - - - - - -
ceil - - - - - - - - - - - -
ceill - - - - - - - - - - - -
cexpf 1 + i 1 1 + i 1 - 1 + i 0 1 + i 1 3 + i 2 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
cexp 1 + i 0 1 + i 0 - - 1 + i 0 - 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
cexpl - - - 940 + i 1067 940 + i 1067 2 + i 0 - - - 1 + i 1 - -
cimagf - - - - - - - - - - - -
cimag - - - - - - - - - - - -
cimagl - - - - - - - - - - - -
clogf 0 + i 3 0 + i 3 - - 0 + i 3 - 0 + i 3 0 + i 3 0 + i 3 0 + i 3 0 + i 3 0 + i 3
clog 0 + i 1 0 + i 1 - - 0 + i 1 - 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
clogl - - - 0 + i 1 0 + i 1 0 + i 1 - - - - - -
clog10f 1 + i 5 1 + i 5 - 1 + i 1 1 + i 5 1 + i 1 1 + i 5 1 + i 5 1 + i 5 1 + i 5 1 + i 5 1 + i 5
clog10 1 + i 1 1 + i 1 - 2 + i 1 2 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
clog10l - - - 1403 + i 186 1402 + i 186 1 + i 3 - - - - - -
conjf - - - - - - - - - - - -
conj - - - - - - - - - - - -
conjl - - - - - - - - - - - -
copysignf - - - - - - - - - - - -
copysign - - - - - - - - - - - -
copysignl - - - - - - - - - - - -
cosf 1 1 - 1 1 1 1 1 1 1 1 1
cos 2 2 - 2 2 2 2 2 2 2 2 2
cosl - - - 529 529 1 - - - 1 - -
coshf - - - - - - - - - - - -
cosh - - - - - - - - - - - -
coshl - - - 309 2 2 - - - - - -
cpowf 4 + i 2 4 + i 2 - 4 + i 2.5333 5 + i 2.5333 1 + i 6 4 + i 2 4 + i 2 4 + i 2 4 + i 2 4 + i 2 4 + i 2
cpow 1 + i 1.1031 1 + i 1.1031 - 1 + i 1.104 1 + i 1.104 1 + i 1.103 1 + i 1.1031 1 + i 2 1 + i 1.1031 1 + i 1.1031 1 + i 1.1031 1 + i 1.1031
cpowl - - - 2 + i 9 1 + i 4 5 + i 2 - - - 3 + i 0.9006 - -
cprojf - - - - - - - - - - - -
cproj - - - - - - - - - - - -
cprojl - - - - - - - - - - - -
crealf - - - - - - - - - - - -
creal - - - - - - - - - - - -
creall - - - - - - - - - - - -
csinf 0 + i 1 0 + i 1 - - 1 + i 1 1 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
csin - - - - - - - - - - - -
csinl - - - 966 + i 168 966 + i 168 - - - - - - -
csinhf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
csinh 0 + i 1 0 + i 1 - 1 + i 1 1 + i 1 - 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
csinhl - - - 413 + i 477 413 + i 477 1 + i 2 - - - - - -
csqrtf 1 + i 1 1 + i 1 - - 1 + i 2 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
csqrt 1 + i 0 1 + i 0 - 1 + i 0 1 + i 0 - 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
csqrtl - - - 237 + i 128 237 + i 128 - - - - 1 + i 1 - -
ctanf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
ctan 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1 1 + i 0 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
ctanl - - - 690 + i 367 690 + i 367 439 + i 2 - - - - - -
ctanhf 2 + i 1 2 + i 1 - 1 + i 1 2 + i 2 1 + i 0 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
ctanh 2 + i 2 2 + i 2 - 0 + i 1 2 + i 2 0 + i 1 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2
ctanhl - - - 286 + i 3074 286 + i 3074 2 + i 25 - - - - - -
erff - - - - - - - - - - - -
erf - - - - - - - - - - - -
erfl - - - - - - - - - - - -
erfcf 12 12 - 12 12 11 12 12 12 12 12 12
erfc 24 24 - 24 24 24 24 24 24 24 24 24
erfcl - - - 36 12 12 - - - - - -
expf - - - - - - - - - - - -
exp - - - - - - - - - - - -
expl - - - 754 412 - - - - - - -
exp10f 2 2 - - 2 - 2 2 2 2 2 2
exp10 6 6 - 1 6 1 6 6 6 6 6 6
exp10l - - - 1182 1182 1 - - - 1 - -
exp2f - - - - - - - - - - - -
exp2 - - - - - - - - - - - -
exp2l - - - 462 462 - - - - - - -
expm1f 1 1 - - 1 - 1 1 1 1 1 1
expm1 - - - - 1 - - - - 1 - -
expm1l - - - 825 825 1 - - - - - -
fabsf - - - - - - - - - - - -
fabs - - - - - - - - - - - -
fabsl - - - - - - - - - - - -
fdimf - - - - - - - - - - - -
fdim - - - - - - - - - - - -
fdiml - - - - - - - - - - - -
floorf - - - - - - - - - - - -
floor - - - - - - - - - - - -
floorl - - - - - - - - - - - -
fmaf - - - - - - - - - - - -
fma - - - - - - - - - - - -
fmal - - - - - - - - - - - -
fmaxf - - - - - - - - - - - -
fmax - - - - - - - - - - - -
fmaxl - - - - - - - - - - - -
fminf - - - - - - - - - - - -
fmin - - - - - - - - - - - -
fminl - - - - - - - - - - - -
fmodf 1 1 - 1 1 1 1 1 1 1 1 1
fmod 2 2 - 2 2 2 2 2 2 2 2 2
fmodl - - - 4096 4096 1 - - - 2 - -
frexpf - - - - - - - - - - - -
frexp - - - - - - - - - - - -
frexpl - - - - - - - - - - - -
gammaf - - - - - - - - - - - -
gamma - - - 1 1 - - - - - - -
gammal - - - 1 1 1 - - - - - -
hypotf 1 1 - 1 1 1 1 1 1 1 1 1
hypot 1 1 - 1 1 - 1 1 1 1 1 1
hypotl - - - 560 560 1 - - - - - -
ilogbf - - - - - - - - - - - -
ilogb - - - - - - - - - - - -
ilogbl - - - - - - - - - - - -
j0f 2 2 - 1 1 1 2 1 2 2 2 2
j0 2 2 - 2 2 1 2 2 2 2 2 2
j0l - - - - - - - - - - - -
j1f 2 2 - 1 2 2 2 2 2 2 2 2
j1 1 1 - 2 2 - 1 1 1 1 1 1
j1l - - - 2 - 2 - - - - - -
jnf 4 4 - 2 4 11 4 4 4 4 4 4
jn 6 6 - 5 6 4 6 6 6 6 6 6
jnl - - - 2 2 2 - - - - - -
lgammaf 2 2 - 2 2 2 2 2 2 2 2 2
lgamma 1 1 - 1 1 1 1 1 1 1 1 1
lgammal - - - 1 1 1 - - - - - -
lrintf - - - - - - - - - - - -
lrint - - - - - - - - - - - -
lrintl - - - - - - - - - - - -
llrintf - - - - - - - - - - - -
llrint - - - - - - - - - - - -
llrintl - - - - - - - - - - - -
logf 1 1 - 1 1 1 1 1 1 1 1 1
log 1 1 - 1 1 1 1 1 1 1 1 1
logl - - - 2341 2341 2 - - - 1 - -
log10f 1 1 - 1 1 1 1 1 1 1 1 1
log10 1 1 - 1 1 1 1 1 1 1 1 1
log10l - - - 2033 2033 1 - - - - - -
log1pf 1 1 - 1 1 1 1 1 1 1 1 1
log1p 1 1 - 1 1 1 1 1 1 1 1 1
log1pl - - - 585 585 2 - - - 1 - -
log2f 1 1 - 1 1 1 1 1 1 1 1 1
log2 1 1 - 1 1 1 1 1 1 1 1 1
log2l - - - 1688 1688 1 - - - - - -
logbf - - - - - - - - - - - -
logb - - - - - - - - - - - -
logbl - - - - - - - - - - - -
lroundf - - - - - - - - - - - -
lround - - - - - - - - - - - -
lroundl - - - - - - - - - - - -
llroundf - - - - - - - - - - - -
llround - - - - - - - - - - - -
llroundl - - - - - - - - - - - -
modff - - - - - - - - - - - -
modf - - - - - - - - - - - -
modfl - - - - - - - - - - - -
nearbyintf - - - - - - - - - - - -
nearbyint - - - - - - - - - - - -
nearbyintl - - - - - - - - - - - -
nextafterf - - - - - - - - - - - -
nextafter - - - - - - - - - - - -
nextafterl - - - - - - - - - - - -
nexttowardf - - - - - - - - - - - -
nexttoward - - - - - - - - - - - -
nexttowardl - - - - - - - - - - - -
powf - - - - - - - - - - - -
pow - - - - - - - - - - - -
powl - - - 725 725 1 - - - - - -
remainderf - - - - - - - - - - - -
remainder - - - - - - - - - - - -
remainderl - - - - - - - - - - - -
remquof - - - - - - - - - - - -
remquo - - - - - - - - - - - -
remquol - - - - - - - - - - - -
rintf - - - - - - - - - - - -
rint - - - - - - - - - - - -
rintl - - - - - - - - - - - -
roundf - - - - - - - - - - - -
round - - - - - - - - - - - -
roundl - - - - - - - - - - - -
scalbf - - - - - - - - - - - -
scalb - - - - - - - - - - - -
scalbl - - - - - - - - - - - -
scalbnf - - - - - - - - - - - -
scalbn - - - - - - - - - - - -
scalbnl - - - - - - - - - - - -
scalblnf - - - - - - - - - - - -
scalbln - - - - - - - - - - - -
scalblnl - - - - - - - - - - - -
sinf - - - - - - - - - - - -
sin - - - - - - - - - - - -
sinl - - - 627 627 1 - - - - - -
sincosf 1 1 - 1 1 1 1 1 1 1 1 1
sincos 1 1 - 1 1 1 1 1 1 1 1 1
sincosl - - - 627 627 1 - - - 1 - -
sinhf 1 1 - 1 1 1 1 1 1 1 1 1
sinh 1 1 - - 1 - 1 1 1 1 1 1
sinhl - - - 1029 1029 - - - - - - -
sqrtf - - - - - - - - - - - -
sqrt - - - - - - - - - - - -
sqrtl - - - 489 489 - - - - 1 - -
tanf - - - - - - - - - - - -
tan 0.5 0.5 - 0.5 0.5 0.5 0.5 1 0.5 0.5 0.5 0.5
tanl - - - 1401 1401 1 - - - 1 - -
tanhf 1 1 - - 1 - 1 1 1 1 1 1
tanh 1 1 - - 1 - 1 1 1 1 1 1
tanhl - - - 521 521 - - - - - - -
tgammaf 1 1 - 1 1 1 1 1 1 1 1 1
tgamma 1 1 - 2 2 1 1 1 1 1 1 1
tgammal - - - 2 1 1 - - - - - -
truncf - - - - - - - - - - - -
trunc - - - - - - - - - - - -
truncl - - - - - - - - - - - -
y0f 1 1 - 1 1 2 1 1 1 1 1 1
y0 2 2 - 3 2 2 2 2 2 2 2 2
y0l - - - 2 2 2 - - - - - -
y1f 2 2 - 2 2 2 2 2 2 2 2 2
y1 3 3 - 3 3 1 3 3 3 3 3 3
y1l - - - 2 1 2 - - - - - -
ynf 2 2 - 3 3 2 2 2 2 2 2 2
yn 3 3 - 6 6 6 3 3 3 3 3 3
ynl - - - 7 7 7 - - - - - -