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存返回的值。
或者还有更好的方法。请多多指教吧。
*太难了 *
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
JIT即时编译器和解释器