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:37 编辑
占沙发,为啥我不加-lm也能成功执行捏 有着和楼上一样的困惑 不加-lm能成功加了反而结果是0
还有个问题为什么小甲鱼这个演示示例最后是./a.out生成的不是.exe文件吗 直接./a就可以了呀 Especially涵 发表于 2016-2-12 14:48
有着和楼上一样的困惑 不加-lm能成功加了反而结果是0
还有个问题为什么小甲鱼这个演示示例最后是./a.o ...
-l 后边接着一个静态库,-lm 告诉 GCC 查看系统提供的数学库(libm)。
为何有时候不加也没事,这是因为 GCC 会将常用的库链接设为默认选项(其实自己是会加上的)。
但妥当起见,建议加上:
PS:exe 是 Windows 的可执行文件格式,如果不指定输出的可执行文件名,GCC 会自动创建一个 a.out 的可执行文件。
小甲鱼 发表于 2016-3-8 03:33
-l 后边接着一个静态库,-lm 告诉 GCC 查看系统提供的数学库(libm)。
为何有时候不加也没事,这是因 ...
这样子 vim博大精深还需要好好学习啊谢谢小甲鱼 没看懂{:10_269:} 我这{:10_269:}初中水平 还真够呛唉。。。。。。。。
越学 越迷糊 重点在评论中学习到了 谢谢鱼叔 {:9_241:} 示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这是因为什么?
好棒呀{:10_254:} 能告诉我a.out是什么意思吗,为啥不用-o编译啦 我用-o编译也会出来一个执行文件 运算结果也是一样的 有点不理解。 learn more 正在学习c的课后题······· 为什么我的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
好晕 屁哥 发表于 2016-6-30 09:32
没看懂 我这初中水平 还真够呛唉。。。。。。。。
越学 越迷糊
慢慢来,不急,照着答案理解 比特阿尔法 发表于 2018-3-6 18:27
慢慢来,不急,照着答案理解
嗯 好的 谢谢
// 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函数用不了 #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:} fasdfa 发表于 2016-12-10 12:15
示例中result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会这 ...
你好,你的问题解决了吗?我也不懂这个-1耶,如果解决了的话能告诉我为什么吗?谢谢(虽然时间隔得比较久哈)