求问VC中关于double精度不准确的有关问题
求问VC中关于double精度不准确的问题,C/C++ code#includestdio.hint main(){longi[40],d[40]//结果数组
求问VC中关于double精度不准确的问题,
C/C++ code#include<stdio.h>int main() { long i[40],d[40]; //结果数组,i数组是整数部分,d数组是小数部分 double m[5]; //m数组是求次幂的底数 int n[5]; //n数组是求次幂的指数 int k=0; //k是输入了多少组 for(k=0; k<6; k++) { scanf("%lf%d",&m[k],&n[k]); } for(k=0; k<6; k++) { printf("%lf %d\n",m[k],n[k]); } return 0; }
这是一个程序的一小部分,虽然定义了几个数组没用,但应该不妨碍,
下面是输入,
99.9 25
99.9 25
99.9 25
99.9 25
99.9 25
99.9 25
然后下面是输出
99.899963 25
99.900000 25
99.900000 25
99.900000 25
99.900000 25
99.900000 25
Press any key to continue
我不明白为什么会最上面的99.9会变成这样,
我单步调试了下,
每次,输入,99.9 实际的值都是,99.900000000000006
然后当我输完最后一个后,也就循环到最后一次时,我输入99.9 m[0]里面的值会变成
99.899963378906605
我就是想问下,这到底是什么原因导致的输入数不精确,,
求大神帮忙
[解决办法]是应为浮点型的特殊存储的问题,1在内存中不是1,可能是0.99999999,可能是1.00000000000000001
[解决办法]浮点数的存储、运算都会引入误差,只要用它,这是免不了的
如果一定要精确,干脆使用定点表示得了:用整数,实在不够用数组,再加上指明小数位数的一个整数
[解决办法]前面的几楼都说了,你如果这样
for(k=0; k<6; k++)
{
printf("%lf %d\n",m[k],n[k]);//改为printf("%.1f %d\n",m[k],n[k]);
}
那么输出的都是99.9