Advertisement

[C/C++] C语言中math.h和cmath库的pow函数存在精度问题

阅读量:

在协助小朋友们解决编程问题时,有一道题目无论怎样提交至在线评测系统都无法通过。

我回到家中后仔细思考了一下,推测可能是由于math.h库在将返回值转换为int类型时出现了精度丢失的情况。

> 测试代码

复制代码
 #include <stdio.h>

    
 #include <math.h>
    
 //MinGW GCC 4.7.2 32-bit Release
    
 int main(){
    
     printf("math.h - double pow(double, double) 精度测试\n");
    
 	
    
     int a=3;
    
     printf("%d\n",(int)pow(5,3));//1.输出125
    
     printf("%d\n",(int)pow(5,a));//2.输出124 这里丢精度了,结合下面的[3],我估计最后的结果是float->int 124.999999999999
    
     printf("%d\n",(int)round(pow(5,a)));//3.输出125 在[2]的基础上补上round()四舍五入函数,结果正常 
    
     printf("%lf\n",pow(5,a));//4.输出125.000000 显然

全部评论 (0)

还没有任何评论哟~