[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)
还没有任何评论哟~
