pow(P)                                                   pow(P)





NAME
       pow, powf, powl - power function

SYNOPSIS
       #include <math.h>

       double pow(double x, double y);
       float powf(float x, float y);
       long double powl(long double x, long double y);


DESCRIPTION
       The  functionality  described  on this reference page is
       aligned with the ISO C standard.  Any  conflict  between
       the  requirements  described here and the ISO C standard
       is unintentional.  This volume  of  IEEE Std 1003.1-2001
       defers to the ISO C standard.

       These  functions  shall compute the value of x raised to
       the power y, x. If x is negative, the application  shall
       ensure that y is an integer value.

       An  application  wishing  to  check for error situations
       should  set  errno   to   zero   and   call   feclearex-
       cept(FE_ALL_EXCEPT)  before calling these functions.  On
       return, if errno is non-zero or  fetestexcept(FE_INVALID
       |  FE_DIVBYZERO  |  FE_OVERFLOW  | FE_UNDERFLOW) is non-
       zero, an error has occurred.

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

       For  finite values of x < 0, and finite non-integer val-
       ues of y, a domain error shall occur and    either a NaN
       (if  representable), or  an implementation-defined value
       shall be returned.

       If the correct value would cause overflow, a range error
       shall  occur  and pow(), powf(), and powl() shall return
       +-HUGE_VAL, +-HUGE_VALF, and +-HUGE_VALL,  respectively,
       with the same sign as the correct value of the function.

       If the correct value would cause underflow, and  is  not
       representable,  a  range  error may occur, and    either
       0.0 (if supported), or   an implementation-defined value
       shall be returned.

       If  x  or  y  is  a NaN, a NaN shall be returned (unless
       specified elsewhere in this description).

       For any value of y (including NaN),  if  x  is  +1,  1.0
       shall be returned.

       For  any  value  of  x (including NaN), if y is +-0, 1.0
       shall be returned.

       For any odd integer value of y > 0, if  x  is  +-0,  +-0
       shall be returned.

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

       If x is -1, and y is +-Inf, 1.0 shall be returned.

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

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

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

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

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

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

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

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

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

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

       For y an odd integer < 0, if x  is  +-0,  a  pole  error
       shall occur and +-HUGE_VAL, +-HUGE_VALF, and +-HUGE_VALL
       shall be returned for pow(), powf(), and powl(), respec-
       tively.

       For  y  <  0 and not an odd integer, if x is +-0, a pole
       error shall occur and HUGE_VAL, HUGE_VALF, and HUGE_VALL
       shall be returned for pow(), powf(), and powl(), respec-
       tively.

       If the correct value would cause underflow, and is  rep-
       resentable,  a  range  error  may  occur and the correct
       value shall be returned.

ERRORS
       These functions shall fail if:

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

       If    the   integer   expression   (math_errhandling   &
       MATH_ERRNO) is non-zero, then  errno  shall  be  set  to
       [EDOM].  If  the  integer expression (math_errhandling &
       MATH_ERREXCEPT) is non-zero, then the invalid  floating-
       point exception shall be raised.

       Pole Error
              The value of x is zero and y is negative.

       If    the   integer   expression   (math_errhandling   &
       MATH_ERRNO) is non-zero, then  errno  shall  be  set  to
       [ERANGE].  If the integer expression (math_errhandling &
       MATH_ERREXCEPT) is  non-zero,  then  the  divide-by-zero
       floating-point exception shall be raised.

       Range Error
              The result overflows.

       If    the   integer   expression   (math_errhandling   &
       MATH_ERRNO) is non-zero, then  errno  shall  be  set  to
       [ERANGE].  If the integer expression (math_errhandling &
       MATH_ERREXCEPT) is non-zero, then the overflow floating-
       point exception shall be raised.


       These functions may fail if:

       Range Error
              The result underflows.

       If    the   integer   expression   (math_errhandling   &
       MATH_ERRNO) is non-zero, then  errno  shall  be  set  to
       [ERANGE].  If the integer expression (math_errhandling &
       MATH_ERREXCEPT) is non-zero, then the  underflow  float-
       ing-point exception shall be raised.


       The following sections are informative.

EXAMPLES
       None.

APPLICATION USAGE
       On    error,   the   expressions   (math_errhandling   &
       MATH_ERRNO) and (math_errhandling & MATH_ERREXCEPT)  are
       independent of each other, but at least one of them must
       be non-zero.

RATIONALE
       None.

FUTURE DIRECTIONS
       None.

SEE ALSO
       exp() , feclearexcept() , fetestexcept() , isnan() , the
       Base Definitions volume of IEEE Std 1003.1-2001, Section
       4.18, Treatment of  Error  Conditions  for  Mathematical
       Functions, <math.h>

COPYRIGHT
       Portions  of  this  text are reprinted and reproduced in
       electronic form from  IEEE  Std  1003.1,  2003  Edition,
       Standard  for Information Technology -- Portable Operat-
       ing System Interface (POSIX), The Open Group Base Speci-
       fications Issue 6, Copyright (C) 2001-2003 by the Insti-
       tute of Electrical and Electronics  Engineers,  Inc  and
       The  Open Group. In the event of any discrepancy between
       this version and the original IEEE and  The  Open  Group
       Standard,  the original IEEE and The Open Group Standard
       is the referee document. The original  Standard  can  be
       obtained        online        at        http://www.open-
       group.org/unix/online.html .



POSIX                         2003                       pow(P)
