如果你要判断a和b的关系,可以这样写
#define EPSILON 1E-6
...
if (fabs(a - b) < EPSILON) // 近似a==b
... float型就是一种“不精确”的数值类型。
毕竟它是用32位二进制数的形式来表示直观的十进制小数。
对于Lz提到的精度范围,可以考虑用64位的double型。
如果需要进行非常非常精确的运算,那么只能自己写高精运算。 很简单。
精度问题。
数值是无限的,而无论是32位float还是64位double,都是有限的。以有限表示无限,必然存在精度损失。
有人知道为什么float型的变量有时不准吗?
写程序多的人都会发现,float型的变量有时不准确,比如本来是因该得1的,但显示出的是0.9999999999999999或1.0000000000000002这在一些需要精确计算的程序中造成麻烦!
页:
[1]