易码技术论坛

 找回密码
 加入易码
搜索
查看: 183564|回复: 3

有人知道为什么float型的变量有时不准吗?

[复制链接]
发表于 2007-1-27 22:54:40 | 显示全部楼层
float本来就是近似数。所以千万不要对浮点数使用“==”
如果你要判断a和b的关系,可以这样写
#define EPSILON 1E-6
...
if (fabs(a - b) < EPSILON) // 近似a==b
...
发表于 2007-1-27 22:57:02 | 显示全部楼层
float型就是一种“不精确”的数值类型。
毕竟它是用32位二进制数的形式来表示直观的十进制小数。
对于Lz提到的精度范围,可以考虑用64位的double型。

如果需要进行非常非常精确的运算,那么只能自己写高精运算。
发表于 2007-1-27 22:57:35 | 显示全部楼层
很简单。
精度问题。
数值是无限的,而无论是32位float还是64位double,都是有限的。以有限表示无限,必然存在精度损失。
 楼主| 发表于 2007-1-27 22:47:59 | 显示全部楼层 |阅读模式
  写程序多的人都会发现,float型的变量有时不准确,比如本来是因该得1的,但显示出的是0.9999999999999999或1.0000000000000002

这在一些需要精确计算的程序中造成麻烦!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-18 15:51 , Processed in 0.010246 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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