This chapter contains information about functions for performing mathematical computations, such as trigonometric functions. Most of these functions have prototypes declared in the header file `math.h'.
All of the functions that operate on floating-point numbers accept
arguments and return results of type double
. In the future,
there may be additional functions that operate on float
and
long double
values. For example, cosf
and cosl
would be versions of the cos
function that operate on
float
and long double
arguments, respectively. In the
meantime, you should avoid using these names yourself. See section 1.3.3 Reserved Names.
Many of the functions listed in this chapter are defined mathematically
over a domain that is only a subset of real numbers. For example, the
acos
function is defined over the domain between -1
and
1
. If you pass an argument to one of these functions that is
outside the domain over which it is defined, the function sets
errno
to EDOM
to indicate a domain error. On
machines that support IEEE 754 floating point, functions reporting
error EDOM
also return a NaN.
Some of these functions are defined mathematically to result in a complex value over parts of their domains. The most familiar example of this is taking the square root of a negative number. The functions in this chapter take only real arguments and return only real values; therefore, if the value ought to be nonreal, this is treated as a domain error.
A related problem is that the mathematical result of a function may not
be representable as a floating point number. If magnitude of the
correct result is too large to be represented, the function sets
errno
to ERANGE
to indicate a range error, and
returns a particular very large value (named by the macro
HUGE_VAL
) or its negation (- HUGE_VAL
).
If the magnitude of the result is too small, a value of zero is returned
instead. In this case, errno
might or might not be
set to ERANGE
.
The only completely reliable way to check for domain and range errors is
to set errno
to 0
before you call the mathematical function
and test errno
afterward. As a consequence of this use of
errno
, use of the mathematical functions is not reentrant if you
check for errors.
None of the mathematical functions ever generates signals as a result of
domain or range errors. In particular, this means that you won't see
SIGFPE
signals generated within these functions. (See section 21 Signal Handling, for more information about signals.)
The value of this macro is used as the return value from various
mathematical double
returning functions in overflow situations.
HUGE_VAL
macro except that it is
used by functions returning float
values.
This macro is a GNU extension.
HUGE_VAL
macro except that it is
used by functions returning long double
values. The value is
only different from HUGE_VAL
if the architecture really supports
long double
values.
This macro is a GNU extension.
For more information about floating-point representations and limits,
see section 28.17.3.2 Floating Point Parameters. In particular, the macro
DBL_MAX
might be more appropriate than HUGE_VAL
for many
uses other than testing for an error in a mathematical function.
These are the familiar sin
, cos
, and tan
functions.
The arguments to all of these functions are in units of radians; recall
that pi radians equals 180 degrees.
The math library doesn't define a symbolic constant for pi, but you can define your own if you need one:
#define PI 3.14159265358979323846264338327
You can also compute the value of pi with the expression acos
(-1.0)
.
-1
to 1
.
-1
to 1
.
The following errno
error conditions are defined for this function:
ERANGE
tan
sets errno
to ERANGE
and returns
either positive or negative HUGE_VAL
.
These are the usual arc sine, arc cosine and arc tangent functions, which are the inverses of the sine, cosine and tangent functions, respectively.
-pi/2
and pi/2
(inclusive).
asin
fails, and sets errno
to EDOM
, if x is
out of range. The arc sine function is defined mathematically only
over the domain -1
to 1
.
0
and pi
(inclusive).
acos
fails, and sets errno
to EDOM
, if x is
out of range. The arc cosine function is defined mathematically only
over the domain -1
to 1
.
-pi/2
and pi/2
(inclusive).
-pi
to pi
, inclusive.
If x and y are coordinates of a point in the plane,
atan2
returns the signed angle between the line from the origin
to that point and the x-axis. Thus, atan2
is useful for
converting Cartesian coordinates to polar coordinates. (To compute the
radial coordinate, use hypot
; see section 13.4 Exponentiation and Logarithms.)
The function atan2
sets errno
to EDOM
if both
x and y are zero; the return value is not defined in this
case.
exp
function returns the value of e (the base of natural
logarithms) raised to power x.
The function fails, and sets errno
to ERANGE
, if the
magnitude of the result is too large to be representable.
exp (log
(x))
equals x, exactly in mathematics and approximately in
C.
The following errno
error conditions are defined for this function:
EDOM
ERANGE
log
function. In fact,
log10 (x)
equals log (x) / log (10)
.
The following errno
error conditions are defined for this function:
EDOM
ERANGE
The sqrt
function fails, and sets errno
to EDOM
, if
x is negative. Mathematically, the square root would be a complex
number.
hypot
function returns sqrt (x*x +
y*y)
. (This is the length of the hypotenuse of a right
triangle with sides of length x and y, or the distance
of the point (x, y) from the origin.) See also the function
cabs
in section 14.3 Absolute Value.
exp (x) - 1
.
It is computed in a way that is accurate even if the value of x is
near zero--a case where exp (x) - 1
would be inaccurate due
to subtraction of two numbers that are nearly equal.
log (1 + x)
.
It is computed in a way that is accurate even if the value of x is
near zero.
The functions in this section are related to the exponential functions; see section 13.4 Exponentiation and Logarithms.
sinh
function returns the hyperbolic sine of x, defined
mathematically as exp (x) - exp (-x) / 2
. The
function fails, and sets errno
to ERANGE
, if the value of
x is too large; that is, if overflow occurs.
cosh
function returns the hyperbolic cosine of x,
defined mathematically as exp (x) + exp (-x) / 2
.
The function fails, and sets errno
to ERANGE
, if the value
of x is too large; that is, if overflow occurs.
sinh (x) / cosh (x)
.
1
, acosh
returns HUGE_VAL
.
1
, atanh
returns
HUGE_VAL
.
This section describes the GNU facilities for generating a series of pseudo-random numbers. The numbers generated are not truly random; typically, they form a sequence that repeats periodically, with a period so large that you can ignore it for ordinary purposes. The random number generator works by remembering at all times a seed value which it uses to compute the next random number and also to compute a new seed.
Although the generated numbers look unpredictable within one run of a program, the sequence of numbers is exactly the same from one run to the next. This is because the initial seed is always the same. This is convenient when you are debugging a program, but it is unhelpful if you want the program to behave unpredictably. If you want truly random numbers, not just pseudo-random, specify a seed based on the current time.
You can get repeatable sequences of numbers on a particular machine type by specifying the same initial seed value for the random number generator. There is no standard meaning for a particular seed value; the same seed, used in different C libraries or on different CPU types, will give you different random numbers.
The GNU library supports the standard ISO C random number functions
plus another set derived from BSD. We recommend you use the standard
ones, rand
and srand
.
rand
and friends.
random
and friends.
This section describes the random number functions that are part of the ISO C standard.
To use these facilities, you should include the header file `stdlib.h' in your program.
rand
function. In the GNU library, it is 037777777
, which is the
largest signed integer representable in 32 bits. In other libraries, it
may be as low as 32767
.
rand
function returns the next pseudo-random number in the
series. The value is in the range from 0
to RAND_MAX
.
rand
before a seed has been
established with srand
, it uses the value 1
as a default
seed.
To produce truly random numbers (not just pseudo-random), do srand
(time (0))
.
This section describes a set of random number generation functions that are derived from BSD. There is no advantage to using these functions with the GNU C library; we support them for BSD compatibility only.
The prototypes for these functions are in `stdlib.h'.
0
to RAND_MAX
.
srandom
function sets the seed for the current random number
state based on the integer seed. If you supply a seed value
of 1
, this will cause random
to reproduce the default set
of random numbers.
To produce truly random numbers (not just pseudo-random), do
srandom (time (0))
.
initstate
function is used to initialize the random number
generator state. The argument state is an array of size
bytes, used to hold the state information. The size must be at least 8
bytes, and optimal sizes are 8, 16, 32, 64, 128, and 256. The bigger
the state array, the better.
The return value is the previous value of the state information array.
You can use this value later as an argument to setstate
to
restore that state.
setstate
function restores the random number state
information state. The argument must have been the result of
a previous call to initstate or setstate.
The return value is the previous value of the state information array.
You can use thise value later as an argument to setstate
to
restore that state.
Go to the first, previous, next, last section, table of contents.