Next: , Previous: Special Functions, Up: Mathematics


19.7 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 has not yet been done.

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. The table tries to cover as much as possible and list the actual 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 Generic ix86 IA64 PowerPC
acosf - - - - -
acos - - - - -
acosl - - 622 - 1
acoshf - - - - -
acosh - - - - -
acoshl - - - - 1
asinf - - - - -
asin - - - - -
asinl - - 1 - 2
asinhf - - - - -
asinh - - - - -
asinhl - - - - 1
atanf - - - - -
atan - - - - -
atanl - - - - -
atanhf 1 - - - 1
atanh - - - - -
atanhl - - 1 - -
atan2f 1 - - - 1
atan2 - - - - -
atan2l 1 - - - 1
cabsf - - - - -
cabs - - - - -
cabsl - - - - 1
cacosf - - 0 + i 1 0 + i 1 -
cacos - - - - -
cacosl 0 + i 1 - 0 + i 2 0 + i 2 1 + i 1
cacoshf 0 + i 1 - 9 + i 4 7 + i 0 7 + i 3
cacosh - - 1 + i 1 1 + i 1 1 + i 1
cacoshl 0 + i 1 - 6 + i 1 7 + i 1 1 + i 0
cargf - - - - -
carg - - - - -
cargl - - - - -
casinf 1 + i 0 - 1 + i 1 1 + i 1 1 + i 0
casin 1 + i 0 - 1 + i 0 1 + i 0 1 + i 0
casinl 0 + i 1 - 2 + i 2 2 + i 2 1 + i 1
casinhf 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
casinhl 4 + i 2 - 5 + i 5 5 + i 5 4 + i 1
catanf 0 + i 1 - 0 + i 1 0 + i 1 4 + i 1
catan 0 + i 1 - 0 + i 1 0 + i 1 0 + i 1
catanl 0 + i 1 - - - 1 + i 1
catanhf - - 1 + i 0 - 0 + i 6
catanh 4 + i 0 - 2 + i 0 4 + i 0 4 + i 0
catanhl 1 + i 1 - 1 + i 0 1 + i 0 -
cbrtf - - - - -
cbrt 1 - - - 1
cbrtl 1 - 1 - 1
ccosf 1 + i 1 - 0 + i 1 0 + i 1 1 + i 1
ccos 1 + i 0 - 1 + i 0 1 + i 0 1 + i 0
ccosl 1 + i 1 - 1 + i 1 1 + i 1 1 + i 1
ccoshf 1 + i 1 - 1 + i 1 1 + i 1 1 + i 1
ccosh 1 + i 0 - 1 + i 1 1 + i 1 1 + i 0
ccoshl 1 + i 1 - 0 + i 1 0 + i 1 1 + i 2
ceilf - - - - -
ceil - - - - -
ceill - - - - -
cexpf 1 + i 1 - - 1 + i 1 1 + i 1
cexp - - - - -
cexpl 1 + i 1 - 1 + i 1 0 + i 1 2 + i 1
cimagf - - - - -
cimag - - - - -
cimagl - - - - -
clogf 1 + i 0 - 1 + i 0 1 + i 0 1 + i 3
clog - - - - -
clogl 1 + i 0 - 1 + i 0 1 + i 0 2 + i 1
clog10f 1 + i 1 - 1 + i 1 1 + i 1 1 + i 5
clog10 0 + i 1 - 1 + i 1 1 + i 1 0 + i 1
clog10l 1 + i 1 - 1 + i 1 1 + i 1 3 + i 1
conjf - - - - -
conj - - - - -
conjl - - - - -
copysignf - - - - -
copysign - - - - -
copysignl - - - - -
cosf 1 - 1 1 1
cos 2 - 2 2 2
cosl 1 - 1 1 1
coshf - - - - -
cosh - - - - -
coshl - - - - 1
cpowf 4 + i 2 - 4 + i 3 5 + i 3 5 + i 2
cpow 2 + i 2 - 1 + i 2 2 + i 2 2 + i 2
cpowl 10 + i 1 - 763 + i 2 6 + i 4 2 + i 2
cprojf - - - - -
cproj - - - - -
cprojl - - - - 0 + i 1
crealf - - - - -
creal - - - - -
creall - - - - -
csinf - - 1 + i 1 1 + i 1 -
csin - - - - -
csinl 1 + i 1 - 1 + i 0 1 + i 0 1 + i 0
csinhf 1 + i 1 - 1 + i 1 1 + i 1 1 + i 1
csinh 0 + i 1 - 1 + i 1 1 + i 1 0 + i 1
csinhl 1 + i 0 - 1 + i 2 1 + i 2 1 + i 1
csqrtf 1 + i 0 - - 1 + i 0 1 + i 0
csqrt - - - - -
csqrtl 1 + i 1 - - - 1 + i 1
ctanf - - 0 + i 1 0 + i 1 -
ctan 0 + i 1 - 1 + i 1 1 + i 1 1 + i 1
ctanl 1 + i 2 - 439 + i 3 2 + i 1 1 + i 1
ctanhf 2 + i 1 - 1 + i 1 0 + i 1 2 + i 1
ctanh 1 + i 0 - 1 + i 1 1 + i 1 1 + i 0
ctanhl 1 + i 1 - 5 + i 25 1 + i 24 1 + i 1
erff - - - - -
erf 1 - 1 1 1
erfl - - - - 1
erfcf - - 1 1 1
erfc 1 - 1 1 1
erfcl 1 - 1 1 1
expf - - - - -
exp - - - - -
expl - - - - 1
exp10f 2 - - 2 2
exp10 6 - - 6 6
exp10l 1 - 8 3 8
exp2f - - - - -
exp2 - - - - -
exp2l 2 - - - 2
expm1f 1 - - - 1
expm1 1 - - - 1
expm1l 1 - - 1 -
fabsf - - - - -
fabs - - - - -
fabsl - - - - -
fdimf - - - - -
fdim - - - - -
fdiml - - - - -
floorf - - - - -
floor - - - - -
floorl - - - - -
fmaf - - - - -
fma - - - - -
fmal - - - - -
fmaxf - - - - -
fmax - - - - -
fmaxl - - - - -
fminf - - - - -
fmin - - - - -
fminl - - - - -
fmodf - - - - -
fmod - - - - -
fmodl - - - - -
frexpf - - - - -
frexp - - - - -
frexpl - - - - -
gammaf - - - - -
gamma - - 1 - -
gammal 1 - 1 1 1
hypotf 1 - 1 1 1
hypot - - - - -
hypotl - - - - 1
ilogbf - - - - -
ilogb - - - - -
ilogbl - - - - -
j0f 2 - 2 2 2
j0 2 - 3 3 3
j0l 2 - 1 2 1
j1f 2 - 1 2 2
j1 1 - 1 1 1
j1l 4 - 1 1 1
jnf 4 - 2 4 4
jn 4 - 5 3 3
jnl 4 - 2 2 4
lgammaf 2 - 2 2 2
lgamma 1 - 1 1 1
lgammal 1 - 1 1 3
lrintf - - - - -
lrint - - - - -
lrintl - - - - -
llrintf - - - - -
llrint - - - - -
llrintl - - - - -
logf - - 1 1 -
log - - - - -
logl - - - - 1
log10f 2 - 1 1 2
log10 1 - - - 1
log10l 1 - 1 1 1
log1pf 1 - - - 1
log1p - - - - -
log1pl 1 - - - 1
log2f - - - - -
log2 - - - - -
log2l 1 - - - 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 - - - - 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 - - - - 1
sincosf 1 - 1 1 1
sincos 1 - 1 1 1
sincosl 1 - 1 1 1
sinhf - - - - -
sinh - - 1 - -
sinhl - - - - 1
sqrtf - - - - -
sqrt - - - - -
sqrtl 1 - - - -
tanf - - - - -
tan 1 - 1 1 1
tanl - - - - 1
tanhf - - - - -
tanh - - - - -
tanhl 1 - - - 1
tgammaf 1 - 1 1 1
tgamma 1 - 2 1 1
tgammal 1 - 1 1 1
truncf - - - - -
trunc - - - - -
truncl - - - - -
y0f 1 - 1 1 1
y0 2 - 2 2 2
y0l 3 - 1 1 1
y1f 2 - 2 2 2
y1 3 - 2 3 3
y1l 1 - 1 1 2
ynf 2 - 3 2 2
yn 3 - 2 3 3
ynl 5 - 4 2 2

Function S/390 SH4 Sparc 32-bit Sparc 64-bit x86_64/fpu
acosf - - - - -
acos - - - - -
acosl - - - - 1
acoshf - - - - -
acosh - - - - -
acoshl - - - - -
asinf - 2 - - -
asin - 1 - - -
asinl - - - - 1
asinhf - - - - -
asinh - - - - -
asinhl - - - - -
atanf - - - - -
atan - - - - -
atanl - - - - -
atanhf 1 - 1 1 1
atanh - 1 - - -
atanhl - - - - 1
atan2f 1 4 6 6 1
atan2 - - - - -
atan2l 1 - 1 1 -
cabsf - 1 - - -
cabs - 1 - - -
cabsl - - - - -
cacosf - 1 + i 1 - - 0 + i 1
cacos - 1 + i 0 - - -
cacosl 0 + i 1 - 0 + i 1 0 + i 1 0 + i 2
cacoshf 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
cacoshl 0 + i 1 - 5 + i 1 5 + i 1 6 + i 1
cargf - - - - -
carg - - - - -
cargl - - - - -
casinf 1 + i 0 2 + i 1 1 + i 0 1 + i 0 1 + i 1
casin 1 + i 0 3 + i 0 1 + i 0 1 + i 0 1 + i 0
casinl 0 + i 1 - 0 + i 1 0 + i 1 2 + i 2
casinhf 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 5 + i 3
casinhl 4 + i 2 - 4 + i 2 4 + i 2 5 + i 5
catanf 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
catanl 0 + i 1 - 0 + i 1 0 + i 1 -
catanhf 0 + i 6 1 + i 6 0 + i 6 0 + i 6 0 + i 6
catanh 4 + i 0 4 + i 1 4 + i 0 4 + i 0 4 + i 0
catanhl 1 + i 1 - 1 + i 1 1 + i 1 1 + i 0
cbrtf - - - - -
cbrt 1 1 1 1 1
cbrtl 1 - 1 1 1
ccosf 1 + i 1 0 + i 1 1 + i 1 1 + i 1 1 + i 1
ccos 1 + i 0 1 + i 1 1 + i 0 1 + i 0 1 + i 0
ccosl 1 + i 1 - 1 + i 1 1 + i 1 1 + i 1
ccoshf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
ccosh 1 + i 0 1 + i 1 1 + i 0 1 + i 0 1 + i 1
ccoshl 1 + i 1 - 1 + i 1 1 + i 1 0 + i 1
ceilf - - - - -
ceil - - - - -
ceill - - - - -
cexpf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
cexp - 1 + i 0 - - -
cexpl 1 + i 1 - 1 + i 1 1 + i 1 0 + i 1
cimagf - - - - -
cimag - - - - -
cimagl - - - - -
clogf 1 + i 3 0 + i 3 1 + i 3 1 + i 3 1 + i 3
clog - 0 + i 1 - - -
clogl 1 + i 0 - 1 + i 0 1 + i 0 1 + i 0
clog10f 1 + i 5 1 + i 5 1 + i 5 1 + i 5 1 + i 5
clog10 0 + i 1 1 + i 1 0 + i 1 0 + i 1 1 + i 1
clog10l 1 + i 1 - 1 + i 1 1 + i 1 1 + i 1
conjf - - - - -
conj - - - - -
conjl - - - - -
copysignf - - - - -
copysign - - - - -
copysignl - - - - -
cosf 1 1 1 1 1
cos 2 2 2 2 2
cosl 1 - 1 1 1
coshf - - - - -
cosh - - - - -
coshl - - - - -
cpowf 4 + i 2 4 + i 2 4 + i 2 4 + i 2 5 + i 2
cpow 2 + i 2 1 + i 1.1031 2 + i 2 2 + i 2 2 + i 2
cpowl 10 + i 1 - 10 + i 1 10 + i 1 5 + i 2
cprojf - - - - -
cproj - - - - -
cprojl - - - - -
crealf - - - - -
creal - - - - -
creall - - - - -
csinf - 0 + i 1 - - 0 + i 1
csin - - - - 0 + i 1
csinl 1 + i 1 - 1 + i 1 1 + i 1 1 + i 0
csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
csinh 0 + i 1 0 + i 1 0 + i 1 0 + i 1 1 + i 1
csinhl 1 + i 0 - 1 + i 0 1 + i 0 1 + i 2
csqrtf 1 + i 0 1 + i 1 1 + i 0 1 + i 0 1 + i 0
csqrt - 1 + i 0 - - -
csqrtl 1 + i 1 - 1 + i 1 1 + i 1 -
ctanf - 1 + i 1 - - 0 + i 1
ctan 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
ctanl 1 + i 2 - 1 + i 2 1 + i 2 439 + i 3
ctanhf 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
ctanh 1 + i 0 2 + i 2 1 + i 0 1 + i 0 1 + i 1
ctanhl 1 + i 1 - 1 + i 1 1 + i 1 5 + i 25
erff - - - - -
erf 1 - 1 1 1
erfl - - - - -
erfcf 1 12 - - -
erfc 1 24 1 1 1
erfcl 1 - 1 1 1
expf - - - - -
exp - - - - -
expl - - - - -
exp10f 2 2 2 2 2
exp10 6 6 6 6 6
exp10l 1 - 1 1 8
exp2f - - - - -
exp2 - - - - -
exp2l 2 - 2 2 -
expm1f 1 1 1 1 1
expm1 1 - 1 1 1
expm1l 1 - 1 1 -
fabsf - - - - -
fabs - - - - -
fabsl - - - - -
fdimf - - - - -
fdim - - - - -
fdiml - - - - -
floorf - - - - -
floor - - - - -
floorl - - - - -
fmaf - - - - -
fma - - - - -
fmal - - - - -
fmaxf - - - - -
fmax - - - - -
fmaxl - - - - -
fminf - - - - -
fmin - - - - -
fminl - - - - -
fmodf - 1 - - -
fmod - 2 - - -
fmodl - - - - -
frexpf - - - - -
frexp - - - - -
frexpl - - - - -
gammaf - - - - -
gamma - - - - -
gammal 1 - 1 1 1
hypotf 1 1 1 1 1
hypot - 1 - - -
hypotl - - - - -
ilogbf - - - - -
ilogb - - - - -
ilogbl - - - - -
j0f 2 2 2 2 2
j0 3 2 2 2 2
j0l 2 - 2 2 1
j1f 2 2 2 2 2
j1 1 1 1 1 1
j1l 4 - 4 4 1
jnf 4 4 4 4 4
jn 4 6 4 4 4
jnl 4 - 4 4 2
lgammaf 2 2 2 2 2
lgamma 1 1 1 1 1
lgammal 1 - 1 1 1
lrintf - - - - -
lrint - - - - -
lrintl - - - - -
llrintf - - - - -
llrint - - - - -
llrintl - - - - -
logf - 1 - - -
log - 1 - - -
logl - - - - -
log10f 2 1 2 2 2
log10 1 1 1 1 1
log10l 1 - 1 1 1
log1pf 1 1 1 1 1
log1p - 1 - - -
log1pl 1 - 1 1 -
log2f - 1 - - -
log2 - 1 - - -
log2l 1 - 1 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 - - - - -
remainderf - - - - -
remainder - - - - -
remainderl - - - - -
remquof - - - - -
remquo - - - - -
remquol - - - - -
rintf - - - - -
rint - - - - -
rintl - - - - -
roundf - - - - -
round - - - - -
roundl - - - - -
scalbf - - - - -
scalb - - - - -
scalbl - - - - -
scalbnf - - - - -
scalbn - - - - -
scalbnl - - - - -
scalblnf - - - - -
scalbln - - - - -
scalblnl - - - - -
sinf - - - - -
sin - - - - -
sinl - - - - -
sincosf 1 1 1 1 1
sincos 1 1 1 1 1
sincosl 1 - 1 1 1
sinhf - 1 - - -
sinh - 1 - - -
sinhl - - - - -
sqrtf - - - - -
sqrt - - - - -
sqrtl 1 - 1 1 -
tanf - - - - -
tan 1 0.5 1 1 1
tanl - - - - -
tanhf - 1 - - -
tanh - 1 - - -
tanhl 1 - 1 1 -
tgammaf 1 1 1 1 1
tgamma 1 1 1 1 1
tgammal 1 - 1 1 1
truncf - - - - -
trunc - - - - -
truncl - - - - -
y0f 1 1 1 1 1
y0 2 2 2 2 2
y0l 3 - 3 3 1
y1f 2 2 2 2 2
y1 3 3 3 3 3
y1l 1 - 1 1 1
ynf 2 2 2 2 2
yn 3 3 3 3 3
ynl 5 - 5 5 4