pow函数使用时候的误差问题

pow函数的使用

很多人有疑问了
pow函数怎么了,多好用啊。
只需一个头文件,就可以随便求指数级数字了。

#include<cmath>      //或#include<math.h>

以上头文件分别是c++格式(左),c格式(右)
本质上没有什么区别,不过貌似c++习惯用左边的(忽略忽略)
求平方根:

pow(double ,0.5);

求立方

pow(double ,3);

求n次方:

pow(double ,n);

多方便啊。

但是,小编我在用pow返回整型的时候头大了在这里插入图片描述

上面是1到10的平方,什么鬼?为啥有24,99!?!?!?

这个问题曾困扰到我不行。经过多番打听和代码鏖战。我终于找到了为何–(误差!):
1.
pow的函数原型:double pow(double ,double);
函数本身是一个返回double类型的函数

2.
pow的计算方式,存在误差,就是说pow(5,2);这条代码,实际上是25,但是由于算法问题(也可能是设备处理器问题,我太laji,不知道。)很可能返回的值是24.9999,然后转化为整型,变成了24。导致输出整型的时候变成了24

我说了这么多,那么怎么解决这个问题呢。

只需要加上一个常变量就好了。一般放在主函数外面,

const int eps = 1e-6;

加上了这个比较小的常变量之后,24.9999就会超过(一点点)或等于25,转化成整型之后就是25了

还有一种方法,就是老老实实用double存返回的值。

或者还有更好的方法。请多多指教吧。

*太难了 *

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值