Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

C mathematical functions

From Wikipedia, the free encyclopedia
C standard library header file providing mathematical functions
C standard library (libc)
General topics
Miscellaneous headers

C mathematical operations are a group of functions in thestandard library of theC programming language implementing basic mathematical functions.[1][2] Different C standards provide different, albeit backwards-compatible, sets of functions. Most of these functions are also available in theC++ standard library, though in different headers (the C headers are included as well, but only as a deprecated compatibility feature).

Overview of functions

[edit]

Most of the mathematical functions, which usefloating-point numbers, are defined in<math.h> (<cmath> header in C++). The functions that operate onintegers, such asabs,labs,div, andldiv, are instead defined in the<stdlib.h> header (<cstdlib> header in C++).

Any functions that operate on angles useradians as the unit of angle.[1]

Not all of these functions are available in theC89 version of the standard. For those that are, the functions accept only typedouble for the floating-point arguments, leading to expensive type conversions in code that otherwise used single-precisionfloat values. In C99, this shortcoming was fixed by introducing new sets of functions that work onfloat andlong double arguments. Those functions are identified byf andl suffixes respectively.[3]

FunctionDescription
abs
labs
llabs
computesabsolute value of an integer value
fabscomputes absolute value of a floating-point value
div
ldiv
lldiv
computes the quotient and remainder ofinteger division
fmodremainder of the floating-point division operation
remaindersigned remainder of the division operation
remquosigned remainder as well as the three last bits of the division operation
fmafused multiply-add operation
fmaxlarger of two floating-point values
fminsmaller of two floating-point values
fdimpositive difference of two floating-point values
nan
nanf
nanl
returns aNaN (not-a-number)
Exponential
functions
expreturnse raised to the given power
exp2returns 2 raised to the given power
expm1returns e raised to the given power, minus one
logcomputesnatural logarithm (to base e)
log2computesbinary logarithm (to base 2)
log10computescommon logarithm (to base 10)
log1pcomputes natural logarithm (to base e) of 1 plus the given number
ilogbextracts exponent of the number
logbextracts exponent of the number
Power
functions
sqrtcomputessquare root
cbrtcomputescubic root
hypotcomputessquare root of the sum of the squares of two given numbers
powraises a number to the given power[4]
Trigonometric
functions
sincomputessine
coscomputescosine
tancomputestangent
asincomputesarc sine
acoscomputesarc cosine
atancomputesarc tangent
atan2computesarc tangent, using signs to determine quadrants
Hyperbolic
functions
sinhcomputes hyperbolic sine
coshcomputes hyperbolic cosine
tanhcomputes hyperbolic tangent
asinhcomputes hyperbolic arc sine
acoshcomputes hyperbolic arc cosine
atanhcomputes hyperbolic arc tangent
Error and
gamma
functions
erfcomputeserror function
erfccomputescomplementary error function
lgammacomputes natural logarithm of the absolute value of thegamma function
tgammacomputes gamma function
Nearest
integer
floating-
point
operations
ceilreturns the nearest integer not less than the given value
floorreturns the nearest integer not greater than the given value
truncreturns the nearest integer not greater in magnitude than the given value
round
lround
llround
returns the nearest integer, rounding away from zero in halfway cases
nearbyintreturns the nearest integer using current rounding mode
rint
lrint
llrint
returns the nearest integer using current rounding mode with exception if the result differs
Floating-
point
manipulation
functions
frexpdecomposes a number into significand and a power of 2
ldexpmultiplies a number by 2 raised to a power
modfdecomposes a number into integer and fractional parts
scalbn
scalbln
multiplies a number by FLT_RADIX raised to a power
nextafter
nexttoward
returns next representable floating-point value towards the given value
copysigncopies the sign of a floating-point value
Classificationfpclassifycategorizes the given floating-point value
isfinitechecks if the argument has finite value
isinfchecks if the argument is infinite
isnanchecks if the argument is NaN
isnormalchecks if the argument is normal
signbitchecks if the sign of the argument is negative

Floating-point environment

[edit]

C99 adds several functions and types for fine-grained control of floating-point environment.[3] These functions can be used to control a variety of settings that affect floating-point computations, for example, the rounding mode, on what conditions exceptions occur, when numbers are flushed to zero, etc. The floating-point environment functions and types are defined in<fenv.h> header (<cfenv> inC++).

FunctionDescription
feclearexceptclears exceptions (C99)
fegetenvstores current floating-point environment (C99)
fegetexceptflagstores current status flags (C99)
fegetroundretrieves current rounding direction (C99)
feholdexceptsaves current floating-point environment and clears all exceptions (C99)
feraiseexceptraises a floating-point exception (C99)
fesetenvsets current floating-point environment (C99)
fesetexceptflagsets current status flags (C99)
fesetroundsets current rounding direction (C99)
fetestexcepttests whether certain exceptions have been raised (C99)
feupdateenvrestores floating-point environment, but keeps current exceptions (C99)

Complex numbers

[edit]

C99 adds a new_Complex keyword (andcomplex convenience macro; only available if the<complex.h> header is included) that provides support for complex numbers. Any floating-point type can be modified withcomplex, and is then defined as a pair of floating-point numbers. Note that C99 and C++ do not implement complex numbers in a code-compatible way – the latter instead provides the classstd::complex.

All operations on complex numbers are defined in the<complex.h> header. As with the real-valued functions, anf orl suffix denotes thefloat complex orlong double complex variant of the function.

FunctionDescription
Basic
operations
cabscomputesabsolute value (C99)
cargcomputesargument of a complex number (C99)
cimagcomputesimaginary part of a complex number (C99)
crealcomputesreal part of a complex number (C99)
conjcomputescomplex conjugate (C99)
cprojcomputes complex projection into theRiemann sphere (C99)
Exponentiation
operations
cexpcomputes complexexponential (C99)
clogcomputes complexlogarithm (C99)
csqrtcomputes complexsquare root (C99)
cpowcomputes complexpower (C99)
Trigonometric
operations
csincomputes complexsine (C99)
ccoscomputes complexcosine (C99)
ctancomputes complextangent (C99)
casincomputes complexarc sine (C99)
cacoscomputes complexarc cosine (C99)
catancomputes complexarc tangent (C99)
Hyperbolic
operations
csinhcomputes complexhyperbolic sine (C99)
ccoshcomputes complexhyperbolic cosine (C99)
ctanhcomputes complexhyperbolic tangent (C99)
casinhcomputes complexhyperbolic arc sine (C99)
cacoshcomputes complexhyperbolic arc cosine (C99)
catanhcomputes complexhyperbolic arc tangent (C99)

A few more complex functions are "reserved for future use in C99".[5] Implementations are provided by open-source projects that are not part of the standard library.

FunctionDescription
Error functionscerfcomputes the complexerror function (C99)
cerfccomputes the complex complementaryerror function (C99)

Type-generic functions

[edit]

The header<tgmath.h> defines a type-generic macro for each mathematical function defined in<math.h> and<complex.h>. This adds a limited support forfunction overloading of the mathematical functions: the same function name can be used with different types of parameters; the actual function will be selected at compile time according to the types of the parameters.

Each type-generic macro that corresponds to a function that is defined for both real and complex numbers encapsulates a total of 6 different functions:float,double andlong double, and theircomplex variants. The type-generic macros that correspond to a function that is defined for only real numbers encapsulates a total of 3 different functions:float,double andlong double variants of the function.

The C++ language includes native support for function overloading and thus does not provide the<tgmath.h> header even as a compatibility feature.

Random-number generation

[edit]

The header<stdlib.h> (<cstdlib> in C++) defines several functions that can be used for statistically random number generation.[6]

FunctionDescription
randgenerates a pseudo-random number between 0 andRAND_MAX, inclusive.
srandinitializes apseudo-random number generator
arc4randomgenerates a pseudo-random number between 0 andUINT32_MAX, usually using a better algorithm thanrand
arc4random_uniformgenerates a pseudo-random number between 0 and a maximum value.
arc4random_buffill a buffer with a pseudo-random bitstream.
arc4random_stirinitializes apseudo-random number generator.

Thearc4random family of random number functions are not defined in POSIX standard, but is found in some commonlibc implementations. It used to refer to the keystream generator of a leaked version ofRC4 cipher (hence "allegedRC4"), but different algorithms, usually from other ciphers likeChaCha20, have been implemented since using the same name.

The quality of randomness fromrand are usually too weak to be even considered statistically random, and it requires explicit seeding. It is usually advised to usearc4random instead ofrand when possible. Some C libraries implementrand usingarc4random_uniform internally.

Implementations

[edit]

UnderPOSIX systems likeLinux andBSD, the mathematical functions (as declared in<math.h>) are bundled separately in the mathematical librarylibm. Therefore, if any of those functions are used, the linker must be given the directive-lm. There are variouslibm implementations, including:

See also:Rounding § Table-maker's dilemma

Implementations not necessarily under a name oflibm include:

See also

[edit]

References

[edit]
  1. ^abISO/IEC 9899:1999 specification(PDF). p. 212, § 7.12.
  2. ^Prata, Stephen (2004).C primer plus. Sams Publishing. Appendix B, Section V: The Standard ANSI C Library with C99 Additions.ISBN 0-672-32696-5.
  3. ^abPrata, Stephen (2004).C primer plus. Sams Publishing. Appendix B, Section VIII: C99 Numeric Computational Enhancements.ISBN 0-672-32696-5.
  4. ^Notationally, it may seem convenient to use pow(x,2) or pow(x,3) to compute squares or cubes. However, this is not advisable in time-critical code. Unless an implementation takes special care of these cases at compile time,x*x orx*x*x will execute much faster. Also, sqrt(x) and cbrt(x) should be preferred over pow(x,.5) or pow(x,1./3).
  5. ^man cerf(3), man cerfc(3), see e.g.https://linux.die.net/man/3/cerf.
  6. ^"The GNU C Library – ISO Random". Retrieved18 July 2018.
  7. ^"Math Functions — The LLVM C Library".libc.llvm.org.
  8. ^"RLibm: Rutgers Architecture and Programming Languages Lab's Correctly Rounded Libm".people.cs.rutgers.edu.
  9. ^Cordes, Peter."intel - Where is Clang's '_mm256_pow_ps' intrinsic?".Stack Overflow.

External links

[edit]
The WikibookC Programming has a page on the topic of:C Programming/C Reference
Features
Standard library
Implementations
Compilers
IDEs
Comparison with
other languages
Descendant
languages
Designer
Retrieved from "https://en.wikipedia.org/w/index.php?title=C_mathematical_functions&oldid=1302403948"
Category:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp