LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 717|回复: 5

为什么会有这样的误差?

[复制链接]
发表于 2005-4-16 14:57:02 | 显示全部楼层 |阅读模式
我的系统是debian linux,内核为Linux debian 2.6.8-1-i386,gcc版本为3.3.5,CPU为P4 1.8A。我用gcc编译了一个计算123.59-30的C程序,运行结果为93.589996,但正确的应当是93.59,为什么会出现这种偏差?
发表于 2005-4-16 16:57:26 | 显示全部楼层
你应该用了float。对float来说123.59 == 123.589996。这是单精度浮点数的精度造成的。你用double就没事了。

其实,不管什么精度的浮点数,都不度应该直接去比较大小。应该设一个epsilon。只要abs(a - b)<=epsilon就认为是相等了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-16 18:51:02 | 显示全部楼层
的确是float的问题。感谢你指点,我差点就不想用gcc了。
回复 支持 反对

使用道具 举报

发表于 2005-4-17 03:58:13 | 显示全部楼层
啊!深奥,长知识!头一次听说,看来数字逻辑白学了
回复 支持 反对

使用道具 举报

发表于 2005-4-17 07:54:19 | 显示全部楼层
计算机里头任何精度都是有限的。
回复 支持 反对

使用道具 举报

发表于 2005-4-17 09:51:02 | 显示全部楼层
这是10进制与二进制小数转换的问题。
改成double也一样,只不过更接近而已。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表