13.10 cmath

   

13.10 <cmath>

The <cmath> header declares a number of mathematical functions (from the C standard <math.h> ). In addition to the standard C function, most functions have overloaded versions for different parameter types; each function's syntax shows all the overloaded versions.

figs/acorn.gif

If an argument is out of range, a domain error occurs. The function sets errno to EDOM and returns an error value. The value is defined by the implementation, so the only portable way to test for a domain error is to check errno . If the function's result is an overflow, a range error occurs. The function returns HUGE_VAL and sets errno to ERANGE . If underflow occurs, the function returns and may or may not set errno to ERANGE . (See <cerrno> for more information about errno .)

HUGE_VAL is defined to be a double , and the C++ standard does not define a suitable value for the float and long double versions of the math functions. If you are using a system that has infinity as an explicit floating-point value (such as IEC 60559/IEEE 754, which is found on PCs, Macintoshes, and modern workstations), the overloaded versions of a function probably return infinity for overflow, so there is no problem with the float and long double versions of the functions. For maximum portability, however, use only the double versions of the math functions.

All the trigonometric functions use radians. The descriptions of these functions use the common mathematical notation for ranges of values. [ x , y ) represents all values z such that x z < y that is, the square bracket denotes an inclusive endpoint of a range, and the parenthesis denotes an exclusive endpoint of a range.

Several other headers in the standard library declare additional mathematical functions:

<cfloat>

Declares macros for the limits of floating-point types

<climits>

Declares macros for the limits of integer types

<complex>

Declares types and functions for working with complex numbers

<cstdlib>

Declares integer absolute value functions and functions that compute a quotient and remainder in a single operation

<limits>

Declares the numeric_limits class template for the limits of the numerical typese.g., the largest float , the precision of double , and so on

<numeric>

Declares generic numerical algorithms

< valarray >

Declares types and functions for computation with arrays of numbers

abs function Computes absolute value

 float  abs  (float x) double  abs  (double x) long double  abs  (long double x) 

The abs function returns the absolute value of its argument: if x < 0, it returns - x ; otherwise , it returns x .

The abs function in <cmath> is the same as fabs . The <cstdlib> header declares integer versions of the abs function.

See Also

fabs function, abs function in <cstdlib>

acos function Computes inverse cosine

 float  acos  (float x) double  acos  (double x) long double  acos  (long double x) 

The acos function returns the inverse cosine of its argument. The parameter x must be in the range [-1, 1], or a domain error occurs. The return value is in the range [0, figs/u03c0.gif ].

asin function Computes inverse sine

 float  asin  (float x) double  asin  (double x) long double  asin  (long double x) 

The asin function returns the inverse sine of its argument. The parameter x must be in the range [-1, 1], or a domain error occurs. The return value is in the range [- figs/u03c0.gif /2, figs/u03c0.gif /2].

atan function Computes inverse tangent

 float  atan  (float x) double  atan  (double x) long double  atan  (long double x) 

The atan function returns the inverse tangent of its argument. The return value is in the range [- figs/u03c0.gif /2, figs/u03c0.gif /2].

atan2 function Computes inverse tangent

 float  atan2  (float y, float x) double  atan2  (double y, double x) long double  atan2  (long double y, long double x) 

figs/acorn.gif

The atan2 function returns the inverse tangent of y/x using the sign of both numbers to determine the quadrant for the return value. It correctly handles the case in which x is . (That is, it returns figs/u03c0.gif /2 times the sign of y for nonzero y ; if y is , the result is implementation-defined and might be a range error). The return value is in the range [- figs/u03c0.gif , figs/u03c0.gif ].

ceil function Computes ceiling

 float  ceil  (float x) double  ceil  (double x) long double  ceil  (long double x) 

The ceil function returns the smallest integer that is greater than or equal to x .

See Also

floor function

cos function Computes cosine

 float  cos  (float x) double  cos  (double x) long double  cos  (long double x) 

The cos function returns the cosine of its argument, in radians. The return value is in the range [-1, 1].

cosh function Computes hyperbolic cosine

 float  cosh  (float x) double  cosh  (double x) long double  cosh  (long double x) 

The cosh function returns the hyperbolic cosine of its argument. Note that <cmath> has no inverse hyperbolic trigonometric functions; the Boost project fills that gap. See Appendix B for information about Boost.

exp function Computes exponential

 float  exp  (float x) double  exp  (double x) long double  exp  (long double x) 

The exp function returns e x . If x is too large, a range error occurs.

See Also

log function, pow function

fabs function Computes absolute value

 float  fabs  (float x) double  fabs  (double x) long double  fabs  (long double x) 

The fabs function returns the absolute value of its argument: if x < 0, it returns - x ; otherwise, it returns x .

The fabs function is the same as abs for floating-point numbers. It exists only for compatibility with C.

See Also

abs function, abs function in <cstdlib>

floor function Computes floor

 float  floor  (float x) double  floor  (double x) long double  floor  (long double x) 

The floor function returns the largest integer that is less than or equal to x .

See Also

ceil function

fmod function Computes modulus

 float  fmod  (float x, float y) double  fmod  (double x, double y) long double  fmod  (long double x, long double y) 

figs/acorn.gif

The fmod function returns the floating-point remainder of dividing x by y . If y is , the behavior is implementation-defined: the return value might be , or a domain error can occur. If y is nonzero, the return value is x - k x y for some integer k , such that the result has the same sign as x and an absolute value less than the absolute value of y .

frexp function Computes binary fraction and exponent

 float  frexp  (float x, int* exp) double  frexp  (double x, int* exp) long double  frexp  (long double x, int* exp) 

The frexp function separates a floating-point number into a fraction and an exponent (with a base of 2) such that x = frac x 2 e , in which frac is in the range [1/2, 1) or is if x is . The exponent, e , is stored in *exp . The return value is frac . If x is , the return value and *exp are .

See Also

ldexp function, modf function

HUGE_VAL macro Range error value

 double  HUGE_VAL  

figs/acorn.gif

When an overflow occurs, most functions set errno to ERANGE and return HUGE_VAL with the correct sign of the result. The exact value of HUGE_VAL is implementation-defined and is not necessarily a compile-time constant. It might even be a value that can be returned as a valid result from the function. In that case, the only way to discover whether an overflow occurred is to test errno , as shown in Example 13-5.

Example

Example 13-5. Computing a logarithm to any base
 // Return the logarithm of x to the base n. template<typename T> T logn(T x, T n) {   errno = 0;   T logx = log(x);   if (errno == ERANGE)     return logx;    // Should be HUGE_VAL   else if (errno != 0)     return logx;    // Implementation defined   T logn = log(n);   if (errno == ERANGE)     return logn;    // Should be HUGE_VAL   else if (errno != 0)     return logn;    // Implementation defined   if (logn == 0) {     errno = EDOM;     return 0;   }   return logx / logn; } 

See Also

<cerrno>

ldexp function Makes floating point from binary fraction and exponent

 float  ldexp  (float frac, int exp) double  ldexp  (double frac, int exp) long double  ldexp  (long double frac, int exp) 

The ldexp function returns a floating-point number that it constructs from a fractional part and an exponent (base 2). The return value is frac x 2 exp .

See Also

frexp function, modf function

log function Computes natural logarithm

 float  log  (float x) double  log  (double x) long double  log  (long double x) 

figs/acorn.gif

The log function returns the natural (base e ) logarithm of its argument. A domain error occurs if x is negative. A range error might occur if x is .

log10 function Computes common logarithm

 float  log10  (float x) double  log10  (double x) long double  log10  (long double x) 

figs/acorn.gif

The log10 function returns the common (base 10) logarithm of its argument. A domain error occurs if x is negative. A range error might occur if x is .

modf function Separates integer and fraction parts

 float  modf  (float x, float* iptr) double  modf  (double x, double* iptr) long double  modf  (long double x, long double* iptr) 

The modf function splits a floating-point number into integral and fractional parts. Both parts have the same sign as x . The integral part is stored in *iptr ; the return value is the fractional part.

See Also

frexp function, ldexp function

pow function Computes power

 float  pow  (float x, float y) float  pow  (float x, int y) double  pow  (double x, double y) double  pow  (double x, int y) long double  pow  (long double x, long double y) long double  pow  (long double x, int y) 

The pow function raises x to the y power. If x is negative, and y is not an integral value, a domain error occurs. If x is , and y is less than or equal to , and the result cannot be represented as a real number, a domain error occurs. A range error can occur if the result is out of range.

See Also

exp function

sin function Computes sine

 float  sin  (float x) double  sin  (double x) long double  sin  (long double x) 

The sin function returns the sine of its argument, in radians. The return value is in the range [-1, 1].

sinh function Computes hyperbolic sine

 float  sinh  (float x) double  sinh  (double x) long double  sinh  (long double x) 

The sinh function returns the hyperbolic sine of its argument. Note that <cmath> has no inverse hyperbolic trigonometric functions; the Boost project fills that gap. See Appendix B for information about Boost.

sqrt function Computes square root

 float  sqrt  (float x) double  sqrt  (double x) long double  sqrt  (long double x) 

The sqrt function returns the square root or its argument. If x is negative, a domain error occurs. The return value is always positive or .

tan function Computes tangent

 float  tan  (float x) double  tan  (double x) long double  tan  (long double x) 

The tan function returns the tangent of its argument. The standard does not specify the result when the tangent is undefined (that is, when x is k figs/u03c0.gif + figs/u03c0.gif /2 for any integer k ), but a reasonable result is a range error. Due to the nature of the tangent function, the sign of the return value ( HUGE_VAL ) can be positive or negative.

tanh function Computes hyperbolic tangent

 float  tanh  (float x) double  tanh  (double x) long double  tanh  (long double x) 

The tanh function returns the hyperbolic tangent of its argument. Note that <cmath> has no inverse hyperbolic trigonometric functions; the Boost project fills that gap. See Appendix B for information about Boost.

   


C++ in a Nutshell
C++ in a Nutshell
ISBN: 059600298X
EAN: 2147483647
Year: 2005
Pages: 270
Authors: Ray Lischner

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net