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 | Generic | ix86 | PowerPC | S/390 | SH4
|
acosf | - | - | - | - | -
|
acos | - | - | - | - | -
|
acosl | - | 1 | 1 | - | -
|
acoshf | - | - | - | - | -
|
acosh | - | - | - | - | -
|
acoshl | - | - | 1 | - | -
|
asinf | - | - | - | - | 2
|
asin | - | - | - | - | 1
|
asinl | - | 1 | 2 | - | -
|
asinhf | - | - | - | - | -
|
asinh | - | - | - | - | -
|
asinhl | - | - | 1 | - | -
|
atanf | - | - | - | - | -
|
atan | - | - | - | - | -
|
atanl | - | - | - | - | -
|
atanhf | - | - | 1 | 1 | -
|
atanh | - | - | - | - | 1
|
atanhl | - | 1 | - | - | -
|
atan2f | - | - | 1 | 1 | 4
|
atan2 | - | - | - | - | -
|
atan2l | - | - | 1 | 1 | -
|
cabsf | - | - | 1 | - | 1
|
cabs | - | - | - | - | 1
|
cabsl | - | - | 1 | - | -
|
cacosf | - | 0 + i 1 | 0 + i 1 | 0 + i 1 | 1 + i 1
|
cacos | - | 1 + i 2 | 1 + i 3 | 1 + i 2 | 1 + i 0
|
cacosl | - | 1 + i 2 | 1 + i 2 | 1 + i 3 | -
|
cacoshf | - | 9 + i 4 | 7 + i 3 | 1 + i 1 | 7 + i 3
|
cacosh | - | 1 + i 1 | 1 + i 1 | 1 + i 1 | 1 + i 1
|
cacoshl | - | 6 + i 1 | 1 + i 1 | 1 + i 1 | -
|
cargf | - | - | - | - | -
|
carg | - | - | - | - | -
|
cargl | - | - | - | - | -
|
casinf | - | 1 + i 1 | 1 + i 1 | 1 + i 1 | 2 + i 1
|
casin | - | 1 + i 2 | 1 + i 3 | 1 + i 2 | 3 + i 0
|
casinl | - | 2 + i 2 | 1 + i 2 | 0 + i 3 | -
|
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 | - | 5 + i 5 | 4 + i 1 | 4 + i 2 | -
|
catanf | - | 0 + i 1 | 4 + i 1 | 0 + i 1 | 4 + i 1
|
catan | - | 0 + i 1 | 0 + i 1 | 0 + i 1 | 0 + i 1
|
catanl | - | - | 1 + i 1 | 0 + i 1 | -
|
catanhf | - | 1 + i 0 | 0 + i 6 | - | 1 + i 6
|
catanh | - | 2 + i 0 | 4 + i 0 | 4 + i 0 | 4 + i 1
|
catanhl | - | 1 + i 0 | - | 1 + i 1 | -
|
cbrtf | - | - | - | - | -
|
cbrt | - | - | 1 | 1 | 1
|
cbrtl | - | 1 | 1 | 1 | -
|
ccosf | - | 1 + i 1 | 1 + i 1 | 1 + i 1 | 0 + i 1
|
ccos | - | 1 + i 1 | 1 + i 1 | 1 + i 1 | 1 + i 1
|
ccosl | - | 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 1 | 1 + i 1 | 1 + i 1 | 1 + i 1
|
ccoshl | - | 0 + i 1 | 1 + i 2 | 1 + i 1 | -
|
ceilf | - | - | - | - | -
|
ceil | - | - | - | - | -
|
ceill | - | - | - | - | -
|
cexpf | - | 1 + i 1 | 1 + i 2 | 1 + i 2 | 1 + i 1
|
cexp | - | 2 + i 1 | 2 + i 1 | 2 + i 1 | 1 + i 0
|
cexpl | - | 1 + i 1 | 2 + i 2 | 1 + i 1 | -
|
cimagf | - | - | - | - | -
|
cimag | - | - | - | - | -
|
cimagl | - | - | - | - | -
|
clogf | - | 1 + i 0 | 2 + i 3 | 1 + i 0 | 0 + i 3
|
clog | - | - | 1 + i 1 | 1 + i 1 | 0 + i 1
|
clogl | - | 1 + i 0 | 2 + i 1 | 1 + i 0 | -
|
clog10f | - | 1 + i 1 | 2 + i 1 | 1 + i 1 | 1 + i 5
|
clog10 | - | 1 + i 1 | 1 + i 1 | 1 + i 1 | 1 + i 1
|
clog10l | - | 1 + i 1 | 3 + i 1 | 1 + i 1 | -
|
conjf | - | - | - | - | -
|
conj | - | - | - | - | -
|
conjl | - | - | - | - | -
|
copysignf | - | - | - | - | -
|
copysign | - | - | - | - | -
|
copysignl | - | - | - | - | -
|
cosf | - | 1 | 1 | 1 | 1
|
cos | - | 2 | 2 | 2 | 2
|
cosl | - | 1 | 1 | 1 | -
|
coshf | - | - | - | - | -
|
cosh | - | - | - | - | -
|
coshl | - | - | 1 | - | -
|
cpowf | - | 5 + i 3 | 5 + i 2 | 5 + i 2 | 4 + i 2
|
cpow | - | 2 + i 2 | 2 + i 2 | 2 + i 2 | 1 + i 1.1031
|
cpowl | - | 5 + i 4 | 2 + i 2 | 11 + i 1 | -
|
cprojf | - | - | - | - | -
|
cproj | - | - | - | - | -
|
cprojl | - | - | 0 + i 1 | - | -
|
crealf | - | - | - | - | -
|
creal | - | - | - | - | -
|
creall | - | - | - | - | -
|
csinf | - | 1 + i 1 | 1 + i 0 | 1 + i 0 | 0 + i 1
|
csin | - | 1 + i 1 | 1 + i 0 | 1 + i 0 | -
|
csinl | - | 1 + i 0 | 1 + i 1 | 1 + i 1 | -
|
csinhf | - | 1 + i 1 | 1 + i 1 | 1 + i 1 | 1 + i 1
|
csinh | - | 1 + i 1 | 0 + i 1 | 0 + i 1 | 0 + i 1
|
csinhl | - | 1 + i 2 | 1 + i 1 | 1 + i 1 | -
|
csqrtf | - | - | 2 + i 2 | 1 + i 1 | 1 + i 1
|
csqrt | - | - | 1 + i 1 | 1 + i 1 | 1 + i 0
|
csqrtl | - | 0 + i 1 | 1 + i 1 | 1 + i 1 | -
|
ctanf | - | 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
|
ctanl | - | 2 + i 1 | 2 + i 1 | 2 + i 2 | -
|
ctanhf | - | 1 + i 1 | 2 + i 1 | 2 + i 1 | 2 + i 1
|
ctanh | - | 1 + i 1 | 1 + i 1 | 1 + i 1 | 2 + i 2
|
ctanhl | - | 1 + i 2 | 3 + i 2 | 2 + i 2 | -
|
erff | - | - | - | - | -
|
erf | - | 1 | 1 | 1 | -
|
erfl | - | - | 1 | - | -
|
erfcf | - | 1 | 1 | 1 | 12
|
erfc | - | 1 | 1 | 1 | 24
|
erfcl | - | 1 | 1 | 1 | -
|
expf | - | - | - | - | -
|
exp | - | - | - | - | -
|
expl | - | - | 1 | - | -
|
exp10f | - | - | 1 | - | 2
|
exp10 | - | - | 1 | 6 | 6
|
exp10l | - | 8 | 1 | 1 | -
|
exp2f | - | - | - | - | -
|
exp2 | - | - | - | - | -
|
exp2l | - | - | 2 | 1 | -
|
expm1f | - | - | 1 | 1 | 1
|
expm1 | - | - | 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 | - | 1 | - | - | -
|
gammal | - | 1 | 1 | 1 | -
|
hypotf | - | 1 | 1 | 1 | 1
|
hypot | - | - | 1 | - | 1
|
hypotl | - | - | 1 | - | -
|
ilogbf | - | - | - | - | -
|
ilogb | - | - | - | - | -
|
ilogbl | - | - | - | - | -
|
j0f | - | 2 | 2 | 2 | 2
|
j0 | - | 3 | 3 | 2 | 2
|
j0l | - | 2 | 2 | 2 | -
|
j1f | - | 1 | 2 | 2 | 2
|
j1 | - | 2 | 1 | 1 | 1
|
j1l | - | 1 | 1 | 4 | -
|
jnf | - | 4 | 5 | 5 | 4
|
jn | - | 5 | 4 | 4 | 6
|
jnl | - | 3 | 7 | 8 | -
|
lgammaf | - | 2 | 2 | 2 | 2
|
lgamma | - | 1 | 1 | 1 | 1
|
lgammal | - | 1 | 3 | 1 | -
|
lrintf | - | - | - | - | -
|
lrint | - | - | - | - | -
|
lrintl | - | - | - | - | -
|
llrintf | - | - | - | - | -
|
llrint | - | - | - | - | -
|
llrintl | - | - | - | - | -
|
logf | - | 1 | - | - | 1
|
log | - | - | - | - | 1
|
logl | - | - | 1 | - | -
|
log10f | - | 1 | 2 | 2 | 1
|
log10 | - | - | 1 | 1 | 1
|
log10l | - | 1 | 1 | 1 | -
|
log1pf | - | - | 1 | 1 | 1
|
log1p | - | - | - | - | 1
|
log1pl | - | - | 1 | 1 | -
|
log2f | - | - | - | - | 1
|
log2 | - | - | - | - | 1
|
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 | - | - | 1 | 1 | -
|
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 | - | 1 | - | - | -
|
sin | - | - | - | - | -
|
sinl | - | - | 1 | - | -
|
sincosf | - | 1 | 1 | 1 | 1
|
sincos | - | 1 | 1 | 1 | 1
|
sincosl | - | 1 | 1 | 1 | -
|
sinhf | - | - | - | - | 1
|
sinh | - | 1 | - | - | 1
|
sinhl | - | - | 1 | - | -
|
sqrtf | - | - | - | - | -
|
sqrt | - | - | 1 | - | -
|
sqrtl | - | - | - | 1 | -
|
tanf | - | 1 | - | - | -
|
tan | - | 1 | 1 | 1 | 0.5
|
tanl | - | 1 | 1 | - | -
|
tanhf | - | - | - | - | 1
|
tanh | - | - | - | - | 1
|
tanhl | - | - | 1 | 1 | -
|
tgammaf | - | 1 | 1 | 1 | 1
|
tgamma | - | 2 | 1 | 1 | 1
|
tgammal | - | 1 | 1 | 1 | -
|
truncf | - | - | - | - | -
|
trunc | - | - | - | - | -
|
truncl | - | - | - | - | -
|
y0f | - | 1 | 1 | 1 | 1
|
y0 | - | 2 | 2 | 2 | 2
|
y0l | - | 1 | 1 | 3 | -
|
y1f | - | 2 | 2 | 2 | 2
|
y1 | - | 2 | 3 | 3 | 3
|
y1l | - | 2 | 2 | 1 | -
|
ynf | - | 3 | 2 | 2 | 2
|
yn | - | 2 | 3 | 3 | 3
|
ynl | - | 4 | 2 | 5 | -
|
Function | sparc/fpu | x86_64/fpu
|
acosf | - | -
|
acos | - | -
|
acosl | - | 1
|
acoshf | - | -
|
acosh | - | -
|
acoshl | - | -
|
asinf | - | -
|
asin | - | -
|
asinl | - | 1
|
asinhf | - | -
|
asinh | - | -
|
asinhl | - | -
|
atanf | - | -
|
atan | - | -
|
atanl | - | -
|
atanhf | 1 | 1
|
atanh | - | -
|
atanhl | - | 1
|
atan2f | 1 | 1
|
atan2 | - | -
|
atan2l | 1 | -
|
cabsf | - | -
|
cabs | - | -
|
cabsl | - | -
|
cacosf | 0 + i 1 | 0 + i 1
|
cacos | 1 + i 2 | 1 + i 2
|
cacosl | 1 + i 3 | 1 + i 2
|
cacoshf | 1 + i 1 | 7 + i 3
|
cacosh | 1 + i 1 | 1 + i 1
|
cacoshl | 1 + i 1 | 6 + i 1
|
cargf | - | -
|
carg | - | -
|
cargl | - | -
|
casinf | 1 + i 1 | 1 + i 1
|
casin | 1 + i 2 | 1 + i 2
|
casinl | 0 + i 3 | 2 + i 2
|
casinhf | 1 + i 6 | 1 + i 6
|
casinh | 5 + i 3 | 5 + i 3
|
casinhl | 4 + i 2 | 5 + i 5
|
catanf | 0 + i 1 | 4 + i 1
|
catan | 0 + i 1 | 0 + i 1
|
catanl | 0 + i 1 | -
|
catanhf | - | 0 + i 6
|
catanh | 4 + i 0 | 4 + i 0
|
catanhl | 1 + i 1 | 1 + i 0
|
cbrtf | - | -
|
cbrt | 1 | 1
|
cbrtl | 1 | 1
|
ccosf | 1 + i 1 | 1 + i 1
|
ccos | 1 + i 1 | 1 + i 1
|
ccosl | 1 + i 1 | 1 + i 1
|
ccoshf | 1 + i 1 | 1 + i 1
|
ccosh | 1 + i 1 | 1 + i 1
|
ccoshl | 1 + i 1 | 0 + i 1
|
ceilf | - | -
|
ceil | - | -
|
ceill | - | -
|
cexpf | 1 + i 2 | 1 + i 2
|
cexp | 2 + i 1 | 2 + i 1
|
cexpl | 1 + i 1 | 1 + i 1
|
cimagf | - | -
|
cimag | - | -
|
cimagl | - | -
|
clogf | 1 + i 0 | 1 + i 3
|
clog | 1 + i 0 | 1 + i 0
|
clogl | 1 + i 0 | 1 + i 0
|
clog10f | 1 + i 1 | 1 + i 5
|
clog10 | 1 + i 1 | 1 + i 1
|
clog10l | 1 + i 1 | 1 + i 1
|
conjf | - | -
|
conj | - | -
|
conjl | - | -
|
copysignf | - | -
|
copysign | - | -
|
copysignl | - | -
|
cosf | 1 | 1
|
cos | 2 | 2
|
cosl | 1 | 1
|
coshf | - | -
|
cosh | - | -
|
coshl | - | -
|
cpowf | 4 + i 2 | 5 + i 2
|
cpow | 2 + i 2 | 2 + i 2
|
cpowl | 11 + i 1 | 5 + i 4
|
cprojf | - | -
|
cproj | - | -
|
cprojl | - | -
|
crealf | - | -
|
creal | - | -
|
creall | - | -
|
csinf | 1 + i 0 | 1 + i 1
|
csin | 1 + i 0 | 1 + i 1
|
csinl | 1 + i 1 | 1 + i 0
|
csinhf | 1 + i 1 | 1 + i 1
|
csinh | 0 + i 1 | 1 + i 1
|
csinhl | 1 + i 1 | 1 + i 2
|
csqrtf | 1 + i 1 | 1 + i 1
|
csqrt | 1 + i 1 | 1 + i 1
|
csqrtl | 1 + i 1 | 0 + i 1
|
ctanf | 1 + i 0 | 1 + i 1
|
ctan | 1 + i 1 | 1 + i 1
|
ctanl | 2 + i 2 | 2 + i 1
|
ctanhf | 1 + i 2 | 1 + i 2
|
ctanh | 1 + i 1 | 1 + i 1
|
ctanhl | 2 + i 2 | 1 + i 2
|
erff | - | -
|
erf | 1 | 1
|
erfl | - | -
|
erfcf | 1 | 1
|
erfc | 1 | 1
|
erfcl | 1 | 1
|
expf | - | -
|
exp | - | -
|
expl | - | -
|
exp10f | 2 | 2
|
exp10 | 6 | 6
|
exp10l | 1 | 8
|
exp2f | - | -
|
exp2 | - | -
|
exp2l | 1 | -
|
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 | - | -
|
gammal | 1 | 1
|
hypotf | 1 | 1
|
hypot | - | -
|
hypotl | - | -
|
ilogbf | - | -
|
ilogb | - | -
|
ilogbl | - | -
|
j0f | 2 | 2
|
j0 | 2 | 2
|
j0l | 2 | 2
|
j1f | 2 | 2
|
j1 | 1 | 1
|
j1l | 4 | 1
|
jnf | 5 | 5
|
jn | 4 | 4
|
jnl | 8 | 3
|
lgammaf | 2 | 2
|
lgamma | 1 | 1
|
lgammal | 1 | 1
|
lrintf | - | -
|
lrint | - | -
|
lrintl | - | -
|
llrintf | - | -
|
llrint | - | -
|
llrintl | - | -
|
logf | - | -
|
log | - | -
|
logl | - | -
|
log10f | 2 | 2
|
log10 | 1 | 1
|
log10l | 1 | 1
|
log1pf | 1 | 1
|
log1p | - | -
|
log1pl | 1 | -
|
log2f | - | -
|
log2 | - | -
|
log2l | 1 | -
|
logbf | - | -
|
logb | - | -
|
logbl | - | -
|
lroundf | - | -
|
lround | - | -
|
lroundl | - | -
|
llroundf | - | -
|
llround | - | -
|
llroundl | - | -
|
modff | - | -
|
modf | - | -
|
modfl | - | -
|
nearbyintf | - | -
|
nearbyint | - | -
|
nearbyintl | - | -
|
nextafterf | - | -
|
nextafter | - | -
|
nextafterl | - | -
|
nexttowardf | - | -
|
nexttoward | - | -
|
nexttowardl | - | -
|
powf | 1 | 1
|
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
|
sincos | 1 | 1
|
sincosl | 1 | 1
|
sinhf | - | -
|
sinh | - | -
|
sinhl | - | -
|
sqrtf | - | -
|
sqrt | - | -
|
sqrtl | - | -
|
tanf | - | -
|
tan | 1 | 1
|
tanl | - | 1
|
tanhf | - | -
|
tanh | - | -
|
tanhl | 1 | -
|
tgammaf | 1 | 1
|
tgamma | 1 | 1
|
tgammal | 1 | 1
|
truncf | - | -
|
trunc | - | -
|
truncl | - | -
|
y0f | 1 | 1
|
y0 | 2 | 2
|
y0l | 3 | 1
|
y1f | 2 | 2
|
y1 | 3 | 3
|
y1l | 1 | 2
|
ynf | 2 | 2
|
yn | 3 | 3
|
ynl | 5 | 4
|