JAY 发表于 2007-1-27 22:54:40

float本来就是近似数。所以千万不要对浮点数使用“==”
如果你要判断a和b的关系,可以这样写
#define EPSILON 1E-6
...
if (fabs(a - b) < EPSILON) // 近似a==b
...

Lendy 发表于 2007-1-27 22:57:02

float型就是一种“不精确”的数值类型。
毕竟它是用32位二进制数的形式来表示直观的十进制小数。
对于Lz提到的精度范围,可以考虑用64位的double型。

如果需要进行非常非常精确的运算,那么只能自己写高精运算。

leesoft 发表于 2007-1-27 22:57:35

很简单。
精度问题。
数值是无限的,而无论是32位float还是64位double,都是有限的。以有限表示无限,必然存在精度损失。

Cloty 发表于 2007-1-27 22:47:59

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

写程序多的人都会发现,float型的变量有时不准确,比如本来是因该得1的,但显示出的是0.9999999999999999或1.0000000000000002

这在一些需要精确计算的程序中造成麻烦!
页: [1]
查看完整版本: 有人知道为什么float型的变量有时不准吗?