Updated: 12 Jul 2006

Index Return to Main Contents

c99 [flag... ]file... -lm[library... ] #include <math.h>

**double pow**(**double ***x*, **double ***y*);

**float powf**(**float ***x*, **float ***y*);

**long double powl**(**long double ***x*, **long double ***y*);

cc [flag... ]file... -lm[library... ] #include <math.h>

**double pow**(**double ***x*, **double ***y*);

**float powf**(**float ***x*, **float ***y*);

**long double powl**(**long double ***x*, **long double ***y*);

These functions compute the value of *x* raised to the power *y,* *x
**y
*. If *x* is negative, *y* must be an integer value.

Upon successful completion, these functions return the value of *x* raised to the power *y*.

For finite values of *x* < 0, and finite non-integer values of *y*, a domain error occurs and either a NaN (if representable), or an implementation-defined value is returned.

If the correct value would cause overflow, a range error occurs and **pow()**, **powf()**, and **powl()** return **HUGE_VAL**, **HUGE_VALF**, and **HUGE_VALL**, respectively.

If *x* or *y* is a NaN, a NaN is returned unless:

•
If *x* is +1 and *y* is NaN and the application was compiled with the **c99** compiler driver and is therefore SUSv3-conforming (see **standards**(5)), 1.0 is returned.

•
For any value of *x* (including NaN), if *y* is +0, 1.0 is returned.

For any odd integer value of *y* > 0, if *x* is ±0, ±0 is returned.

For *y* > 0 and not an odd integer, if *x* is ±0, +0 is returned.

If *x* is ±1 and *y* is ±Inf, and the application was compiled with the **cc** compiler driver, NaN is returned. If, however, the application was compiled with the **c99** compiler driver and is therefore SUSv3-conforming
(see**standards**(5)), 1.0 is returned.

For |*x*| < 1, if *y* is -Inf, +Inf is returned.

For |*x*| > 1, if *y* is -Inf, +0 is returned.

For |*x*| < 1, if *y* is +Inf, +0 is returned.

For |*x*| > 1, if *y* is +Inf, +Inf is returned.

For *y* an odd integer < 0, if *x* is -Inf, -0 is returned.

For *y* < 0 and not an odd integer, if *x* is -Inf, +0 is returned.

For *y* an odd integer > 0, if *x* is -Inf, -Inf is returned.

For *y* > 0 and not an odd integer, if *x* is -Inf, +Inf is returned.

For *y* < 0, if *x* is +Inf, +0 is returned.

For *y* > 0, if *x* is +Inf, +Inf is returned.

For *y* an odd integer < 0, if *x* is ±0, a pole error occurs and ±**HUGE_VAL**, ±**HUGE_VALF**, and ±**HUGE_VALL** are returned for **pow()**, **powf()**,
and **powl()**, respectively.

For *y* < 0 and not an odd integer, if *x* is ±0, a pole error occurs and **HUGE_VAL**, **HUGE_VALF**, and **HUGE_VALL** are returned for **pow()**, **powf()**, and **powl()**, respectively.

For exceptional cases, **matherr**(3M) tabulates the values to be returned by **pow()** as specified by SVID3 and XPG3.

These functions will fail if:

**Domain Error**
The value of *x* is negative and *y* is a finite non-integer.

If the integer expression (**math_errhandling** & **MATH_ERREXCEPT**) is non-zero, the invalid floating-point exception is raised.

The **pow()** function sets **errno** to **EDOM** if the value of *x* is negative and *y* is non-integral.

**Pole Error**
The value of *x* is 0 and *y* is negative.

If the integer expression (**math_errhandling** & **MATH_ERREXCEPT**) is non-zero, the divide-by-zero floating-point exception is raised.

**Range Error**
The result overflows.

If the integer expression (**math_errhandling** & **MATH_ERREXCEPT**) is non-zero, the overflow floating-point exception is raised.

The **pow()** function sets **errno** to **EDOM** if the value to be returned would cause overflow.

An application wanting to check for exceptions should call **feclearexcept**(**FE_ALL_EXCEPT**) before calling these functions. On return, if **fetestexcept**(**FE_INVALID** | **FE_DIVBYZERO** | **FE_OVERFLOW**
| **FE_UNDERFLOW**) is non-zero, an exception has been raised. An application should either examine the return value or check the floating point exception flags to detect exceptions.

An application can also set **errno** to 0 before calling **pow()**. On return, if **errno** is non-zero, an error has occurred. The **powf()** and **powl()** functions do not set **errno**.

See **attributes**(5) for descriptions of the following attributes:

ATTRIBUTE TYPE | ATTRIBUTE VALUE |

Interface Stability | Standard |

MT-Level | MT-Safe |

**exp**(3M), **feclearexcept**(3M), **fetestexcept**(3M), **isnan**(3M), **math.h**(3HEAD), **matherr**(3M), **attributes**(5), **standards**(5)

Prior to Solaris 2.6, there was a conflict between the **pow()** function in this library and the **pow()** function in the **libmp** library. This conflict was resolved by prepending **mp_** to all functions in the **libmp**
library. See **mp**(3MP) for more information.

- NAME
- SYNOPSIS
- DESCRIPTION
- RETURN VALUES
- ERRORS
- USAGE
- ATTRIBUTES
- SEE ALSO
- NOTES

This document was created by man2html, using the manual pages.

Time: 02:39:32 GMT, October 02, 2010