小甲鱼 发表于 2015-12-19 03:11:38

pow -- 求幂

pow 函数文档

函数概要:

1. pow(x, y) 用于求 x 的 y 次幂。

2. gcc 编译需要加上 -lm 选项。


函数原型:

#include <math.h>
...
double pow(double x, double y);

参数解析:


参数含义
x 浮点型,表示底数
y 浮点型,表示指数


返回值:

如果该函数调用成功,返回值是 x 的 y 次幂。


备注:

1. 如果底数 x 为负数并且指数 y 不是整数,将产生 domain error 错误,并返回 NaN;

2. 如果结果溢出,将产生 range error 错误,并返回符号正确的 HUGE_VAL;

3. 如果结果下溢或无法表示,将产生 range error 错误,并返回 0.0;

4. 除了下边这些特例,如果 x 或 y 其中一个是 NaN,那么返回值为 NaN:


[*]如果 x 是 +1,返回值是 1.0(即使 y 为 NaN)
[*]如果 y 是 0,返回值是 1.0(即使 x 为 NaN)
[*]如果 x 是 +0(-0),且 y 是大于 0 的奇数,返回值是 0(-0)
[*]如果 x 是 0,且 y 是大于 0 的非奇数,返回值是 +0
[*]如果 x 是 -1,且 y 是正或负无穷大,返回值是 1.0
[*]如果 x 的绝对值小于 1,且 y 是负无穷大,返回值是正无穷大
[*]如果 x 的绝对值大于 1,且 y 是负无穷大,返回值是 +0
[*]如果 x 的绝对值小于 1,且 y 是正无穷大,返回值是 +0
[*]如果 x 的绝对值大于 1,且 y 是正无穷大,返回值是正无穷大
[*]如果 x 是负无穷大,且 y 是小于 0 的奇数,返回值是 -0
[*]如果 x 是负无穷大,且 y 是小于 0 但非奇数,返回值是 +0
[*]如果 x 是负无穷大,且 y 是大于 0 的奇数,返回值是负无穷大
[*]如果 x 是负无穷大,且 y 是大于 0 但非奇数,返回值是正无穷大
[*]如果 x 是正无穷大,且 y 小于 0,返回值是 +0
[*]如果 x 是正无穷大,且 y 大于 0,返回值是正无穷大
[*]如果 x 是 +0 或 -0,且 y 是小于 0 的奇数,将产生 pole error,并返回与 x 相同符号的 HUGE_VAL
[*]如果 x 是 +0 或 -0,且 y 是小于 0 的非奇数,将产生 pole error,并返回 HUGE_VAL

小甲鱼温馨提示:NaN 是 Not a number(不是一个数字)的缩写,定义于 IEEE 754 浮点标准,可以参考学习 -> 浮点数:表示更大范围的小数(#) <- NaN 和 正负无穷大的表示在这里边都有讲!


演示:

#include <stdio.h>
#include <math.h>

int main()
{
      int result;

      result = pow(2, 31) - 1;      
      printf("result = %d\n", result);

      return 0;
}


版权归鱼C工作室(www.fishc.com)所有,转载请注明来源!

wing1995 发表于 2015-12-29 19:20:52

本帖最后由 wing1995 于 2015-12-29 19:37 编辑

占沙发,为啥我不加-lm也能成功执行捏

Especially涵 发表于 2016-2-12 14:48:05

有着和楼上一样的困惑 不加-lm能成功加了反而结果是0
还有个问题为什么小甲鱼这个演示示例最后是./a.out生成的不是.exe文件吗   直接./a就可以了呀

小甲鱼 发表于 2016-3-8 03:33:41

Especially涵 发表于 2016-2-12 14:48
有着和楼上一样的困惑 不加-lm能成功加了反而结果是0
还有个问题为什么小甲鱼这个演示示例最后是./a.o ...

-l 后边接着一个静态库,-lm 告诉 GCC 查看系统提供的数学库(libm)。

为何有时候不加也没事,这是因为 GCC 会将常用的库链接设为默认选项(其实自己是会加上的)。

但妥当起见,建议加上:



PS:exe 是 Windows 的可执行文件格式,如果不指定输出的可执行文件名,GCC 会自动创建一个 a.out 的可执行文件。


Especially涵 发表于 2016-3-8 12:32:25

小甲鱼 发表于 2016-3-8 03:33
-l 后边接着一个静态库,-lm 告诉 GCC 查看系统提供的数学库(libm)。

为何有时候不加也没事,这是因 ...

这样子 vim博大精深还需要好好学习啊谢谢小甲鱼

屁哥 发表于 2016-6-30 09:32:34

没看懂{:10_269:} 我这{:10_269:}初中水平 还真够呛唉。。。。。。。。
越学 越迷糊

pikapi 发表于 2016-9-4 20:58:07

重点在评论中学习到了 谢谢鱼叔

微凉 发表于 2016-10-11 14:12:01

{:9_241:}

fasdfa 发表于 2016-12-10 12:15:14

示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这是因为什么?

王泽琦 发表于 2017-1-10 15:34:48

好棒呀{:10_254:}

欧阳0116 发表于 2017-4-28 20:31:06

能告诉我a.out是什么意思吗,为啥不用-o编译啦 我用-o编译也会出来一个执行文件 运算结果也是一样的 有点不理解。

chopsticks 发表于 2017-7-17 22:58:01

learn more

yjycaowbc1234 发表于 2017-8-14 20:30:53

正在学习c的课后题·······

fwinmachao 发表于 2017-9-6 09:52:35

为什么我的pow(x,y)函数中, x,y如果一个是常量,一个是变量, 就会报错...
# cat a.c
#include <stdio.h>
#include <math.h>
int main ()
{
int i=5;
int m;
int n=2;
m=pow(2,i);   //如果此处把i换成5,或者把2换成n, 就不会报错了.
printf("%d\n",m);
printf("Hello world!\n");
return 0;
}
# gcc a.c && ./a.out
/tmp/ccMau2XU.o: In function `main':
a.c:(.text+0x25): undefined reference to `pow'
collect2: ld returned 1 exit status

八个核桃罒 发表于 2017-10-8 09:25:17

好晕

比特阿尔法 发表于 2018-3-6 18:27:07

屁哥 发表于 2016-6-30 09:32
没看懂 我这初中水平 还真够呛唉。。。。。。。。
越学 越迷糊

慢慢来,不急,照着答案理解

屁哥 发表于 2018-3-6 20:03:10

比特阿尔法 发表于 2018-3-6 18:27
慢慢来,不急,照着答案理解

嗯 好的 谢谢

Hjds-f 发表于 2018-3-11 15:13:15

// ConsoleApplication2.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "math.h"


int main()
{
        unsigned int result = pow(2,32) - 1;
        printf("result = %d\n", result);

        return 0;
}
为什么   我输出是-1   pow函数用不了

爱因斯坦程序员 发表于 2018-5-23 09:35:35

#include <stdio.h>
#include <math.h>
int main()
{
        int result;
        result = pow(2, 31) - 1;
        printf("result=%d\n", result);
        return 0;
}
我这样写然后系统就会报错 在pow下面划红色波浪线但是加了-lm又会在lm下面划红波浪线,这是为什么?{:10_245:}

sunnyrubik 发表于 2018-10-11 07:57:45

fasdfa 发表于 2016-12-10 12:15
示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这 ...

你好,你的问题解决了吗?我也不懂这个-1耶,如果解决了的话能告诉我为什么吗?谢谢(虽然时间隔得比较久哈)
页: [1] 2 3 4 5 6
查看完整版本: pow -- 求幂