判断两个量是否相等的时候习惯性的使用==,殊不知这样用包含了极大的风险。看个例子
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会搞的很郁闷的。