鱼C论坛

 找回密码
 立即注册
查看: 70264|回复: 117

[函数快查] pow -- 求幂

    [复制链接]
发表于 2015-12-19 03:11:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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;
}
搜狗截图20151219031141.png

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

评分

参与人数 9荣誉 +37 鱼币 +19 贡献 +17 收起 理由
大汉忠臣神荀彧 + 5 + 5 + 3
syjcss + 5
fuaowei + 5 + 5 + 3
ch_tf + 5 + 5 + 3 感谢楼主无私奉献!
十年一日 + 4 + 1
鱼cnb + 5 + 1 + 3 请不要无意义灌水!
Crazyeye + 1
m18191352667 + 5 + 1 + 3 Thx!
Ruide + 2 + 2 + 1 Obrigado !

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-29 19:20:52 | 显示全部楼层
本帖最后由 wing1995 于 2015-12-29 19:37 编辑

占沙发,为啥我不加-lm也能成功执行捏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 8 反对 2

使用道具 举报

发表于 2016-2-12 14:48:05 | 显示全部楼层
有着和楼上一样的困惑 不加-lm能成功  加了反而结果是0
还有个问题  为什么小甲鱼这个演示示例最后是./a.out  生成的不是.exe文件吗   直接./a就可以了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 4 反对 1

使用道具 举报

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

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

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

但妥当起见,建议加上:

搜狗截图20160308033147.png

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 14 反对 1

使用道具 举报

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

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

这样子 vim博大精深  还需要好好学习啊  谢谢小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2016-6-30 09:32:34 | 显示全部楼层
没看懂 我这初中水平 还真够呛  唉。。。。。。。。
越学 越迷糊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 9 反对 0

使用道具 举报

发表于 2016-9-4 20:58:07 | 显示全部楼层
重点在评论中学习到了 谢谢鱼叔
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2016-10-11 14:12:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-10 12:15:14 | 显示全部楼层
示例中  result = pow(2,31) - 1; 的- 1是什么意思? 不加这个-1 会转换溢出 但用long long int就不会  这是因为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 20 反对 0

使用道具 举报

发表于 2017-1-10 15:34:48 | 显示全部楼层
好棒呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-28 20:31:06 | 显示全部楼层
能告诉我a.out是什么意思吗,为啥不用-o编译啦 我用-o编译也会出来一个执行文件 运算结果也是一样的 有点不理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 22:58:01 | 显示全部楼层
learn more
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-14 20:30:53 | 显示全部楼层
正在学习c的课后题·······
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-6 09:52:35 | 显示全部楼层
为什么我的pow(x,y)函数中, x,y如果一个是常量,一个是变量, 就会报错...
[root@Grace fishc]# 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;
}
[root@Grace fishc]# 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-8 09:25:17 | 显示全部楼层
好晕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-6 18:27:07 | 显示全部楼层
屁哥 发表于 2016-6-30 09:32
没看懂 我这初中水平 还真够呛  唉。。。。。。。。
越学 越迷糊

慢慢来,不急,照着答案理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-6 20:03:10 | 显示全部楼层
比特阿尔法 发表于 2018-3-6 18:27
慢慢来,不急,照着答案理解

嗯 好的 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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函数用不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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下面划红波浪线,这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

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


你好,你的问题解决了吗?我也不懂这个-1耶,如果解决了的话能告诉我为什么吗?谢谢(虽然时间隔得比较久哈)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表