前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pow函数问题

pow函数问题

作者头像
phith0n
发布2020-10-15 22:19:19
1K0
发布2020-10-15 22:19:19
举报

pow函数问题

    不要随便用pow函数

    ——这是我这几天写程序的切身体会,如果需要用整数的乘方运算,自己写一个函数吧。

    昨天在网上做一道题,其中我写了一句n = (int) pow ( 5.0 , ( double ) k );我认为应该没有问题。因为math库里的pow函数的两个参数和返回值都是浮点型。返回的数我只要它的整数部分(本来也应该是个整数)。

    于是后来题目一直不能过,而且我的两个编译器( VC6和CFREE )算出的结果还不一样。通过一晚上的调试,我才找到这里。后来自己写了一个pow函数,解决了问题。

    我们可以来做个试验,写一个程序:

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>
int main()
{
	for(int i = 0 ; i < 10 ; i++)
	{
		long n;
		n = (int)pow(5,i);
		printf("%d\n",n);
	}
	return 0;
}

    你放在VC6下运行,毫无问题是吗,输出为:

代码语言:javascript
复制
1
5
25
125
625
3125
15625
78125
390625
1953125

    你放在linux下编译运行(或者在win下用cfree这种用mingw32编译器的软件编译运行),结果如下:

代码语言:javascript
复制
1
5
24
124
624
3125
15624
78124
390624
1953124

    看到了么?从52开始就错。你把n = ( int ) pow ( 5 , i ); 换成n = (int) pow ( 5.0 , ( double ) k ); 结果一样。为什么,我也不知道为什么。你算3的乘方都没出问题。下次我真的不敢用pow函数了。

    题目交了一晚上过不了,因为评测系统用的是linux,而我是在VC6下调试运行的。

    无力吐槽C的兼容性。后来还遇到了一个64位整数的问题,一样也是因为不同平台下不同编译器出的结果就不一样,这些兼容性问题在一道题里面集中反映了出来,也真是不简单。(关于这个64位整数的问题我以后会讲讲)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pow函数问题
    •     不要随便用pow函数
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档