pow函数返回值出现误差问题

来源:互联网 发布:数据分析师考试大纲 编辑:程序博客网 时间:2024/06/07 20:41

今天在写程序时,发现了一个pow返回误差的问题。例如直接输出

cout<<pow(10, 4)<<endl;

输出结果是9999, 存在误差。


我是在codeblocks编译器中发现的这个问题,并不能保证在其他编译器中也会有同样问题。


上网查了一下资料,我们都知道(int)99.99999后其值为99.


所以pow函数的结果是用数值逼近的方法给出的,并不保证严格精确,执行效率也不高,在不同平台也可能存在一定的差异,所以导致结果并不是我们预期想要的。


解决方法:


1.强制转换为(double)类型

double d=pow(10, 4);cout<<d<<endl;

2.加一个误差修正

printf("%d\n",(int)round(pow(10,4)));

3.或者直接换编译器

0 0