问题全文:以下哪行代码在比较小数时包含潜在的逻辑错误?
可能有几个正确答案。
1)我真的不明白这个问题。“潜在的逻辑错误”是什么意思?
2)我填写的所有比较都检查了http://ideone.com/xNE6TB只有第二行不正确:
2-0.8 === 1+1.2
但我明白这不是真的,不是因为有逻辑错误,而是比较愚蠢地得出不同的数字 1.2 和 2.2 但答案只是第二行不正确。帮助 nuba who than can with explanations.
问题全文:以下哪行代码在比较小数时包含潜在的逻辑错误?
可能有几个正确答案。
1)我真的不明白这个问题。“潜在的逻辑错误”是什么意思?
2)我填写的所有比较都检查了http://ideone.com/xNE6TB只有第二行不正确:
2-0.8 === 1+1.2
但我明白这不是真的,不是因为有逻辑错误,而是比较愚蠢地得出不同的数字 1.2 和 2.2 但答案只是第二行不正确。帮助 nuba who than can with explanations.
在这种情况下,使用浮点数,网站上有关其准确性的文档甚至有一个部分以红色突出显示。这些数字没有精确的内部表示,它们的精度被认为大约为小数点后 14 位。任何垃圾都可以在数字上走得更远,这会产生意想不到的结果。
例如,相同的比较
6/5 === 1.2
在内存中很可能表示为6/5 === 1.2000000000000004
,比较的结果表示为1.19999999999998 == 1.2000000000000004
。因此,需要谨慎处理此类数字。通常,数字与一些小差异进行比较abs(6/5 - 1.2) < 0.00001
。直接比较它们==
或被===
认为是逻辑谬误,因为它是一颗定时炸弹。因此我们得到:
5 不是 2 的幂,所以分数不能精确表示。
没有必要比较平等。
和上次一样。
另外,这些数字根本不相等。
这是第一个相等性测试的正确形式。
虽然我会
1e-7
用1e-4
.理论上,两个文字常量彼此相等。但这很奇怪。
相关问题:== 比较对于 double 类型安全吗?
!==
第一项的正确比较形式。