---
title: pow
description: "计算x的y次幂。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0121.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0121.html
indexId: 8cc4fad1efc7e68086c397edf8c7491579c38adba2a511237d5accac73fb7b7476
---
# pow

计算x的y次幂。

#### 接口定义

C interface：

float powf(float x, float y);

double pow(double x, double y);

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

Fortran interface：

RES = POWF(X, Y);

RES = POW(X, Y);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| x | 在powf中，x是单精度浮点类型。 在pow中，x是双精度浮点类型。 在powl中，x是长双精度浮点类型。 | 表示输入数据的浮点值。 | 输入 |
| y | 在powf中，y是单精度浮点类型。 在pow中，y是双精度浮点类型。 在powl中，y是长双精度浮点类型。 | 表示输入数据的浮点值。 | 输入 |


#### 返回值

- x大于0且y为小数，返回幂指数的结果，取值范围(-INF, +INF)。
- 输入x为-0，y为负的奇数，返回-∞；其他x为±0，y为负数，返回+∞。
- 输入x为±0，y为正的奇数，返回±0；其他x为±0，y为正数，返回+0。
- 输入x为±1，y为任意值，则返回+1。
- 输入x为任意值，y为±0，则返回+1。
- 输入x小于+0，y为小数，则返回nan。
- 输入|x|小于1，y为-∞，则返回+∞；输入|x|大于1，y为-∞，则返回+0。
- 输入|x|小于1，y为+∞，则返回+0；输入|x|大于1，y为+∞，则返回+∞。
- 输入x为-∞，y为负奇数，则返回-0；其他x为-∞，y为负数，则返回+0。
- 输入x为-∞，y为正奇数，则返回-∞；其他x为-∞，y为正数，则返回+∞。
- 输入x为+∞，y小于+0，则返回+0；其他x为+∞，则返回+∞。
- 输入x为大的有限数，且y为大的有限数，则返回±∞。
- 输入x为nan，且y为nan，则返回nan。


#### 依赖

C: "km.h"


#### 示例

C interface：

```
double pi = acos(-1);
// typical usage
double x1 = 1.0, x2 = 2.0, x3 = 3.0, x4 = 4.0;
double y1 = 4.0, y2 = -4.0, y3 = -3.0, y4 = 3.0;
// special handing
double a = 0.0, b = INFINITY, c = -INFINITY, d = NAN, e = 1.0;
// print result
printf("pow(1.0, 4.0) = %.15f\n", pow(x1, y1));
printf("pow(2.0, -4.0) = %.15f\n", pow(x2, y2));
printf("pow(3.0, -3.0) = %.15f\n", pow(x3, y3));
printf("pow(4.0, 3.0) = %.15f\n", pow(x4, y4));
printf("pow(1.0, 0.0) = %+.15f\n", pow(x1, a));
printf("pow(INFINITY, 1.0) = %+.15f\n", pow(b, x1));
printf("pow(-INFINITY, -1.0) = %+.15f\n", pow(c, -x1));
printf("pow(1.0, -INFINITY) = %+.15f\n", pow(x1, c));
printf("pow(1.0, NAN) = %+.15f\n", pow(x1, d));
printf("pow(NAN, -1.0) = %+.15f\n", pow(d, -x1));
/*
*  pow(1.0, 4.0) = 1.000000000000000
*  pow(2.0, -4.0) = 0.062500000000000
*  pow(3.0, -3.0) = 0.037037037037037
*  pow(4.0, 3.0) = 64.000000000000000
*  pow(1.0, 0.0) = +1.000000000000000
*  pow(INFINITY, 1.0) = +inf
*  pow(-INFINITY, -1.0) = -0.000000000000000
*  pow(1.0, -INFINITY) = +1.000000000000000
*  pow(1.0, NAN) = +1.000000000000000
*  pow(NAN, -1.0) = +nan
*
* */
```

Fortran interface：
```
REAL(8) :: X = 3.0
REAL(8) :: Y = -3.0
PRINT*,  POW(X, Y)
!
! OUTPUT
!     0.037037037037037
!
```
