POW(3M) | Mathematical Library Functions | POW(3M) |

pow, powf, powl - power function

c99 [flag... ]file...-lm[library... ] #include <math.h>doublepow(doublex,doubley);

floatpowf(floatx,floaty);

long doublepowl(long doublex,long doubley);

cc [flag... ]file...-lm[library... ] #include <math.h>doublepow(doublex,doubley);

floatpowf(floatx,floaty);

long doublepowl(long doublex,long doubley);

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:

- o
- 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(7)), 1.0 is returned.

- o
- 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(7)),
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(7) for descriptions of the following attributes:

ATTRIBUTE TYPE | ATTRIBUTE VALUE |

Interface Stability | Standard |

MT-Level | MT-Safe |

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

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.

July 12, 2006 | SunOS 5.11 |