Aug 9, 2008

fmod()值,终结

终于要有一个交代了
哎,问题的关键还是处在加法上面
我的失误啊,得补补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:

Powered By Blogger