哎,问题的关键还是处在加法上面
我的失误啊,得补补C语言数据类型了
浮点型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的
有效位以外的数字将被舍去
一个浮点型变量保证的有效数字是7位
后几位是不准确的,对于加法来说就没有意义了
比如以下程序
/*--------------
浮点型数据的舍入误差
----------------*/
#include
void main()
{
float a,b;
a = 123456.789e5;
b = a + 20;
printf("%f\n",b);
}
程序输出a与b相等
因为a的值比20大很多。b理论值为12345678920
而一个浮点型变量只能保证的有效数字是7位,后面的数字无意义,不能准确表示
输出为12345678848.000000
前八位是准确的,后几位不准确,把20加上去是没有意义的
与此类似,用程序计算1.0/3.0*3结果不等于1
其实将float改成double就几乎不存在舍入的问题了。。。
fine。继续奋斗
No comments:
Post a Comment