数值变量值相等性的判断

判断两个量是否相等的时候习惯性的使用==,殊不知这样用包含了极大的风险。看个例子

 1 nominal = 1.0
 2 sum = 0.0
 3 
 4 for i = 1, 10 do
 5     sum = sum + 0.1
 6 end
 7 
 8 print(nominal == sum, nominal, sum)
 9 
10 
11 
12 x = 1
13 y = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
14 z = 1.0
15 
16 print(x==y, x==z, y==z, x, y, z)

猜猜看输出是什么,哪些个是true,哪些是false。运行一下

更进一步,可以知道 x - y > 0的结果是true的,应该说这个是无比让人纠结的。只是累加了10次,而且是0.1这种不是很极值的就这样了,只能喟叹了。有兴趣可以试试在C++、java中的结果。

 

较好的一种处理方法是,自己编写相等性判断函数,数值变量可以通过判断差值的范围来自己决定是否应该相等。这个结论应该牢记,以后要记得使用,不然bug会搞的很郁闷的。

posted on 2012-10-28 21:38  小交响曲  阅读(213)  评论(0编辑  收藏  举报

导航