libm
- C math library
Synopsis
c99 [ flag... ] file... -lm [ library... ]
Description
Functions in this library provide common elementary mathematical functions and floating point
environment routines defined by System V, ANSI C, POSIX, and so on.
See standards(5). Additional functions in this library provide extended support for handling
floating point exceptions.
INTERFACES
The shared object libm.so.2 provides the public interfaces defined below. See Intro(3)
for additional information on shared object interfaces.
acos |
acosf |
acosh |
acoshf |
acoshl |
acosl |
asin |
asinf |
asinh |
asinhf |
asinhl |
asinl |
atan |
atan2 |
atan2f |
atan2l |
atanf |
atanh |
atanhf |
atanhl |
atanl |
cabs |
cabsf |
cabsl |
cacos |
cacosf |
cacosh |
cacoshf |
cacoshl |
cacosl |
carg |
cargf |
cargl |
casin |
casinf |
casinh |
casinhf |
casinhl |
casinl |
catan |
catanf |
catanh |
catanhf |
catanhl |
catanl |
cbrt |
cbrtf |
cbrtl |
ccos |
ccosf |
ccosh |
ccoshf |
ccoshl |
ccosl |
ceil |
ceilf |
ceill |
cexp |
cexpf |
cexpl |
cimag |
cimagf |
cimagl |
clog |
clogf |
clogl |
conj |
conjf |
conjl |
copysign |
copysignf |
copysignl |
cos |
cosf |
cosh |
coshf |
coshl |
cosl |
cpow |
cpowf |
cpowl |
cproj |
cprojf |
cprojl |
creal |
crealf |
creall |
csin |
csinf |
csinh |
csinhf |
csinhl |
csinl |
csqrt |
csqrtf |
csqrtl |
ctan |
ctanf |
ctanh |
ctanhf |
ctanhl |
ctanl |
erf |
erfc |
erfcf |
erfcl |
erff |
erfl |
exp |
exp2 |
exp2f |
exp2l |
expf |
expl |
expm1 |
expm1f |
expm1l |
fabs |
fabsf |
fabsl |
fdim |
fdimf |
fdiml |
feclearexcept |
fegetenv |
fegetexceptflag |
fegetround |
feholdexcept |
feraiseexcept |
fesetenv |
fesetexceptflag |
fesetround |
fetestexcept |
feupdateenv |
fex_get_handling |
fex_get_log |
fex_get_log_depth |
fex_getexcepthandler |
fex_log_entry |
fex_merge_flags |
fex_set_handling |
fex_set_log |
fex_set_log_depth |
fex_setexcepthandler |
floor |
floorf |
floorl |
fma |
fmaf |
fmal |
fmax |
fmaxf |
fmaxl |
fmin |
fminf |
fminl |
fmod |
fmodf |
fmodl |
frexp |
frexpf |
frexpl |
gamma |
gamma_r |
gammaf |
gammaf_r |
gammal |
gammal_r |
hypot |
hypotf |
hypotl |
ilogb |
ilogbf |
ilogbl |
isnan |
j0 |
j0f |
j0l |
j1 |
j1f |
j1l |
jn |
jnf |
jnl |
ldexp |
ldexpf |
ldexpl |
lgamma |
lgamma_r |
lgammaf |
lgammaf_r |
lgammal |
lgammal_r |
llrint |
llrintf |
llrintl |
llround |
llroundf |
llroundl |
log |
log10 |
log10f |
log10l |
log1p |
log1pf |
log1pl |
log2 |
log2f |
log2l |
logb |
logbf |
logbl |
logf |
logl |
lrint |
lrintf |
lrintl |
lround |
lroundf |
lroundl |
matherr |
modf |
modff |
modfl |
nan |
nanf |
nanl |
nearbyint |
nearbyintf |
nearbyintl |
nextafter |
nextafterf |
nextafterl |
nexttoward |
nexttowardf |
nexttowardl |
pow |
powf |
powl |
remainder |
remainderf |
remainderl |
remquo |
remquof |
remquol |
rint |
rintf |
rintl |
round |
roundf |
roundl |
scalb |
scalbf |
scalbl |
scalbln |
scalblnf |
scalblnl |
scalbn |
scalbnf |
scalbnl |
signgam |
signgamf |
signgaml |
significand |
significandf |
significandl |
sin |
sincos |
sincosf |
sincosl |
sinf |
sinh |
sinhf |
sinhl |
sinl |
sqrt |
sqrtf |
sqrtl |
tan |
tanf |
tanh |
tanhf |
tanhl |
tanl |
tgamma |
tgammaf |
tgammal |
trunc |
truncf |
truncl |
y0 |
y0f |
y0l |
y1 |
y1f |
y1l |
yn |
ynf |
ynl |
|
|
The following interfaces are unique to the x86 and x64 versions of
this library:
ACCURACY
ISO/IEC 9899:1999, also known as C99, specifies the functions listed in the
following tables and states that the accuracy of these functions is “implementation-defined”.
The information below characterizes the accuracy of these functions as implemented in
libm.so.2. For each function, the tables provide an upper bound on the largest
error possible for any argument and the largest error actually observed among
a large sample of arguments. Errors are expressed in “units in the
last place”, or ulps, relative to the exact function value for each
argument (regarding the argument as exact). Ulps depend on the precision of the
floating point format: if y is the exact function value, x and
x' are adjacent floating point numbers such that x < y <
x', and x'' is the computed function value, then provided x, x',
and x'' all lie in the same binade, the error in x''
is |y - x''| / |x - x'| ulps. In particular, when the
error is less than one ulp, the computed value is one of
the two floating point numbers adjacent to the exact value.
The bounds and observed errors listed below apply only in the default
floating point modes. Specifically, on SPARC, these bounds assume the rounding direction
is round-to-nearest and non-standard mode is disabled. On x86, the bounds assume
the rounding direction is round-to-nearest and the rounding precision is round-to-64-bits. Moreover, on
x86, floating point function values are returned in a floating point register
in extended double precision format, but the bounds below assume that the
result value is then stored to memory in the format corresponding to
the function's type. On x64, the bounds assume the rounding direction in both
the x87 floating point control word and the MXCSR is round-to-nearest, the
rounding precision in the x87 control word is round-to-64-bits, and the FTZ
and DAZ modes are disabled.
The error bounds listed below are believed to be correct, but smaller
bounds might be proved later. The observed errors are the largest ones
currently known, but larger errors might be discovered later. Numbers in the
notes column refer to the notes following the tables.
Real Functions
Single precision real functions (SPARC, x86, and x64)
|
|
|
|
|
|
|
|
acosf |
1.0 |
< 1 |
|
acoshf |
1.0 |
< 1 |
|
asinf |
1.0 |
< 1 |
|
asinhf |
1.0 |
< 1 |
|
atanf |
1.0 |
< 1 |
|
atan2f |
1.0 |
< 1 |
|
atanhf |
1.0 |
< 1 |
|
cbrtf |
1.0 |
< 1 |
|
cosf |
1.0 |
< 1 |
|
coshf |
1.0 |
< 1 |
|
erff |
1.0 |
< 1 |
|
erfcf |
1.0 |
<
1 |
|
expf |
1.0 |
< 1 |
|
exp2f |
1.0 |
< 1 |
|
expm1f |
1.0 |
< 1 |
|
hypotf |
1.0 |
< 1 |
|
lgammaf |
1.0 |
< 1 |
|
logf |
1.0 |
< 1 |
|
log10f |
1.0 |
< 1 |
|
log1pf |
1.0 |
< 1 |
|
log2f |
1.0 |
< 1 |
|
powf |
1.0 |
< 1 |
|
sinf |
1.0 |
< 1 |
|
sinhf |
1.0 |
<
1 |
|
sqrtf |
0.5 |
0.500 |
[1] |
tanf |
1.0 |
< 1 |
|
tanhf |
1.0 |
< 1 |
|
tgammaf |
1.0 |
< 1 |
|
|
Double precision real functions (SPARC and x64)
|
|
|
|
|
|
|
|
acos |
1.0 |
< 1 |
|
acosh |
4.0 |
1.878 |
|
asin |
1.0 |
< 1 |
|
asinh |
7.0 |
1.653 |
|
atan |
1.0 |
<1 |
|
atan2 |
2.5 |
1.475 |
|
atanh |
4.0 |
1.960 |
|
cbrt |
1.0 |
< 1 |
|
cos |
1.0 |
< 1 |
|
cosh |
3.0 |
1.168 |
|
erf |
4.0 |
0.959 |
|
erfc |
6.0 |
2.816 |
|
exp |
1.0 |
<
1 |
|
exp2 |
2.0 |
1.050 |
|
expm1 |
1.0 |
< 1 |
|
hypot |
1.0 |
< 1 |
|
lgamma |
61.5 |
5.629 |
[2] |
log |
1.0 |
< 1 |
|
log10 |
3.5 |
1.592 |
|
log1p |
1.0 |
< 1 |
|
log2 |
1.0 |
< 1 |
|
pow |
1.0 |
< 1 |
|
sin |
1.0 |
< 1 |
|
sinh |
4.0 |
2.078 |
|
sqrt |
0.5 |
0.500 |
[1] |
tan |
1.0 |
< 1 |
|
tanh |
3.5 |
2.136 |
|
tgamma |
1.0 |
< 1 |
|
|
Double precision real functions (x86)
|
|
|
|
|
|
|
|
acos |
1.0 |
< 1 |
|
acosh |
4.0 |
1.694 |
|
asin |
1.0 |
< 1 |
|
asinh |
7.0 |
1.493 |
|
atan |
1.0 |
< 1 |
|
atan2 |
1.0 |
< 1 |
|
atanh |
4.0 |
1.445 |
|
cbrt |
1.0 |
< 1 |
|
cos |
1.0 |
< 1 |
|
cosh |
3.0 |
1.001 |
|
erf |
4.0 |
0.932 |
|
erfc |
6.0 |
2.728 |
|
exp |
1.0 |
< 1 |
|
exp2 |
1.0 |
< 1 |
|
expm1 |
1.0 |
< 1 |
|
hypot |
1.0 |
< 1 |
|
lgamma |
61.5 |
2.654 |
[2] |
log |
1.0 |
<
1 |
|
log10 |
1.0 |
< 1 |
|
log1p |
1.0 |
< 1 |
|
log2 |
1.0 |
< 1 |
|
pow |
1.0 |
< 1 |
|
sin |
1.0 |
< 1 |
|
sinh |
4.0 |
1.458 |
|
sqrt |
0.5003 |
0.500 |
[1] |
tan |
1.0 |
< 1 |
|
tanh |
3.5 |
1.592 |
|
tgamma |
1.0 |
< 1 |
|
|
Quadruple precision real functions (SPARC)
|
|
|
|
|
|
|
|
acosl |
3.5 |
1.771 |
|
acoshl |
8.0 |
1.275 |
|
asinl |
4.0 |
2.007 |
|
asinhl |
9.0 |
1.823 |
|
atanl |
1.0 |
<
1 |
|
atan2l |
2.5 |
1.102 |
|
atanhl |
4.0 |
1.970 |
|
cbrtl |
1.0 |
< 1 |
|
cosl |
1.0 |
< 1 |
|
coshl |
3.5 |
0.985 |
|
erfl |
2.0 |
0.779 |
|
erfcl |
68.5 |
13.923 |
|
expl |
1.0 |
< 1 |
|
exp2l |
2.0 |
0.714 |
|
expm1l |
2.0 |
1.020 |
|
hypotl |
1.0 |
< 1 |
|
lgammal |
18.5 |
2.916 |
[2] |
logl |
1.0 |
< 1 |
|
log10l |
3.5 |
1.156 |
|
log1pl |
2.0 |
1.216 |
|
log2l |
3.5 |
1.675 |
|
powl |
1.0 |
< 1 |
|
sinl |
1.0 |
< 1 |
|
sinhl |
4.5 |
1.589 |
|
sqrtl |
0.5 |
0.500 |
[1] |
tanl |
4.5 |
2.380 |
|
tanhl |
4.5 |
1.692 |
|
tgammal |
1.0 |
< 1 |
|
|
Extended precision real functions (x86 and x64)
|
|
|
|
|
|
|
|
acosl |
3.0 |
1.868 |
|
acoshl |
8.0 |
2.352 |
|
asinl |
3.0 |
1.716 |
|
asinhl |
9.0 |
2.346 |
|
atanl |
1.0 |
< 1 |
|
atan2l |
1.0 |
< 1 |
|
atanhl |
4.0 |
2.438 |
|
cbrtl |
1.0 |
< 1 |
|
cosl |
1.0 |
< 1 |
|
coshl |
3.5 |
1.288 |
|
erfl |
1.0 |
< 1 |
|
erfcl |
78.5 |
13.407 |
|
expl |
3.5 |
1.291 |
|
exp2l |
1.5 |
0.807 |
|
expm1l |
4.0 |
1.936 |
|
hypotl |
3.5 |
2.087 |
|
lgammal |
22.5 |
4.197 |
[2] |
logl |
2.0 |
0.881 |
|
log10l |
2.0 |
1.284 |
|
log1pl |
5.0 |
2.370 |
|
log2l |
1.0 |
< 1 |
|
powl |
32770.0 |
4478.132 |
|
sinl |
1.0 |
< 1 |
|
sinhl |
4.5 |
2.356 |
|
sqrtl |
0.5 |
0.500 |
[1] |
tanl |
4.5 |
2.366 |
|
tanhl |
4.5 |
2.417 |
|
tgammal |
1.0 |
< 1 |
|
|
Notes:
- [1]
- On SPARC and x64, sqrtf, sqrt, and sqrtl are correctly rounded in accordance with IEEE 754. On x86, sqrtl is correctly rounded, sqrtf is correctly rounded provided the result is narrowed to single precision as discussed above, but sqrt might not be correctly rounded due to “double rounding”: when the intermediate value computed to extended precision lies exactly halfway between two representable numbers in double precision, the result of rounding the intermediate value to double precision is determined by the round-ties-to-even rule. If this rule causes the second rounding to round in the same direction as the first, the net rounding error can exceed 0.5 ulps. (The error is bounded instead by 0.5*(1 + 2^-11) ulps.)
- [2]
Error bounds for lgamma and lgammal apply only for positive arguments.
Complex functions
The real-valued complex functions cabsf, cabs, cabsl, cargf, carg, and cargl are
equivalent to the real functions hypotf, hypot, hypotl, atan2f, atan2, and atan2l,
respectively. The error bounds and observed errors given above for the latter
functions also apply to the former.
The complex functions listed below are complex-valued. For each function, the error
bound shown applies separately to both the real and imaginary parts of
the result. (For example, both the real and imaginary parts of cacosf(z)
are accurate to within 1 ulp regardless of their magnitudes.) Similarly, the largest
observed error shown is the largest error found in either the real
or the imaginary part of the result.
Single precision complex functions (SPARC and x64)
|
|
|
|
|
|
|
|
cacosf, cacoshf |
1 |
<
1 |
[1] |
casinf, casinhf |
1 |
< 1 |
|
catanf, catanhf |
6 |
< 1 |
|
ccosf, ccoshf |
10 |
2.012 |
|
cexpf |
3 |
2.239 |
|
clogf |
3 |
< 1 |
|
cpowf |
— |
< 1 |
[2] |
csinf, csinhf |
10 |
2.009 |
|
csqrtf |
4 |
< 1 |
|
ctanf, ctanhf |
13 |
6.987 |
|
|
Single precision complex functions (x86)
|
|
|
|
|
|
|
|
cacosf, cacoshf |
1 |
< 1 |
[1] |
casinf, casinhf |
1 |
< 1 |
|
catanf, catanhf |
6 |
< 1 |
|
ccosf, ccoshf |
10 |
1.984 |
|
cexpf |
3 |
1.984 |
|
clogf |
3 |
< 1 |
|
cpowf |
— |
< 1 |
[2] |
csinf,
csinhf |
10 |
1.973 |
|
csqrtf |
4 |
< 1 |
|
ctanf, ctanhf |
13 |
4.657 |
|
|
Double precision complex functions (SPARC and x64)
|
|
|
|
|
|
|
|
cacos, cacosh |
9 |
3.831 |
[1] |
casin, casinh |
9 |
3.732 |
|
catan, catanh |
6 |
4.179 |
|
ccos, ccosh |
10 |
3.832 |
|
cexp |
3 |
2.255 |
|
clog |
3 |
2.870 |
|
cpow |
- |
- |
[2] |
csin, csinh |
10 |
3.722 |
|
csqrt |
4 |
3.204 |
|
ctan,
ctanh |
13 |
7.143 |
|
|
Double precision complex functions (x86)
|
|
|
|
|
|
|
|
cacos, cacosh |
9 |
3.624 |
[1] |
casin, casinh |
9 |
3.624 |
|
catan, catanh |
6 |
2.500 |
|
ccos, ccosh |
10 |
2.929 |
|
cexp |
3 |
2.147 |
|
clog |
3 |
1.927 |
|
cpow |
- |
- |
[2] |
csin, csinh |
10 |
2.918 |
|
csqrt |
4 |
1.914 |
|
ctan, ctanh |
13 |
4.630 |
|
|
Quadruple precision complex functions (SPARC)
|
|
|
|
|
|
|
|
cacosl, cacoshl |
9 |
3 |
[1] |
casinl, casinhl |
9 |
3 |
|
catanl, catanhl |
6 |
3 |
|
ccosl, ccoshl |
10 |
3 |
|
cexpl |
3 |
2 |
|
clogl |
3 |
2 |
|
cpowl |
- |
- |
[2] |
csinl, csinhl |
10 |
3 |
|
csqrtl |
4 |
3 |
|
ctanl, ctanhl |
13 |
5 |
|
|
Extended precision complex functions (x86 and x64)
|
|
|
|
|
|
|
|
cacosl, cacoshl |
9 |
2 |
[1] |
casinl, casinhl |
9 |
2 |
|
catanl, catanhl |
6 |
2 |
|
ccosl, ccoshl |
10 |
3 |
|
cexpl |
3 |
2.699 |
|
clogl |
3 |
1 |
|
cpowl |
- |
- |
[2] |
csinl, csinhl |
10 |
3 |
|
csqrtl |
4 |
1.452 |
|
ctanl, ctanhl |
13 |
5 |
|
|
Notes:
- [1]
- The complex hyperbolic trigonometric functions are equivalent by symmetries to their circular trigonometric counterparts. Because the implementations of these functions exploit these symmetries, corresponding functions have the same error bounds and observed errors.
- [2]
For large arguments, the results computed by cpowf, cpow, and cpowl can have unbounded relative error. It might be possible to give error bounds for specific domains, but no such bounds are currently available. The observed errors shown are for the domain {(z,w) : max(|Re z|, |Im z|, |Re w|, |Im w|) <= 1}.
Files
- /lib/libm.so.2
shared object
- /lib/64/libm.so.2
64-bit shared object
Attributes
See attributes(5) for descriptions of the following attributes:
|
|
Availability |
system/library/math |
MT-Level |
Safe with exceptions |
|
As described on the lgamma(3M) manual page, gamma() and lgamma() and their
float and long double counterparts are Unsafe. All other functions in libm.so.2 are
MT-Safe.
See Also
Intro(3), lgamma(3M), math.h(3HEAD), attributes(5), standards(5)