就如9楼所说,这里的关键是就是浮点数的精度问题。
浮点数并不是百分百正确的,浮点数0.1十分接近数学上的1/10,但实际上并不精确的相等。所以在使用x=x+0.1时,由于精度原因,每次累加就会造成误差的累加,最后和71.0比较时就会造成在精度范围内并不相等,比如就有可能为71.000000001之类的(在C/C++中'=='是指在要求的精度范围内完全相等)。可以参考下面:
#include<stdio.h>
int main(viod)
{
float i;
for(i=0;i<=2.0;i+=0.1)
{
printf("%.1f\n",i);
}
return 0;
}
很显然,这个程序理论上可以输出0.0, 0.1, 0.2, ...... 2.0这些数,但实际上,大多数的pc只能输出0.0, 0.1, 0.2,..... 1.9,这就印证了上面的说法
谈到这里想必lz应该知道上面的程序为什么只能输出两个结果了吧。
正是由于浮点数的这种特性,所以,我们使用浮点数进行判断是否相等、比较大小、加减运算等等就要特别注意
例如在for循环中我们应多使用整型做循环的变量,整型是精确的。上面的程序可以这样改写:
for(i=10;i<=20;i++)
{
x=i/10.0;
printf("%.1f\n",x);
},这样就可以避免一些问题。
比较大小我们要知道具体所需要的精度,要在精度所允许的范围内判断。
加减时就要考虑到十进制小数在转化成二进制小数时,并不是所有的十进制小数都能转化为有限长度的二进制小数,所以可能得不到想要的结果
总之,使用浮点数前要详细的考虑到自己的实际需求
----------------------------------------------------------------------------------------
以上部分内容摘自《C语言的科学和艺术》、http://blog.、http://bbs.
此外,对于这部分我也了解的不是很清晰,故以上仅供参考,如有错误还请指出
ps:那两个链接可以看一下,讲得很详细,但有些部分有错误,所以还请留心
[
本帖最后由 wssy213 于 2014-7-14 13:43 编辑 ]