提问人:pizzae 提问时间:3/4/2018 更新时间:3/25/2018 访问量:31
是否可以对数字进行不必要的测试?
Is it possible to do unnecessary testing for numbers?
问:
例如,如果我想测试这个数字,我可以写一个测试来测试它确实等于 。那么是否有必要添加其他测试,例如 和 ?或者,检查这一事实是否意味着其他测试也是正确的?x = 5
x
5
x != 4
x != 6
x = 5
答:
0赞
Frank Puffer
3/7/2018
#1
如果变量完全表示数字,则无需针对不同的值进行测试。除了显而易见之外,这还源于标准数学中假设的等式运算符的传递性。x
但是,许多小数(如 0.1)不能用标准二进制编码精确表示。在这种情况下,您必须接受某个错误,因此不应进行测试,因为即使两个值在所需的容差范围内相等,也可能如此。相反,您应该测试 where 是否是接受的错误。x == 0.1
false
x <= 0.1 + e AND x >= 0.1 - e
e
顺便说一句,我用了不等式运算符代替,因为在 C 和相关语言中,无论原始值是多少,都是 :)。==
=
x = 5
x
0赞
Olivier Melançon
3/25/2018
#2
这完全取决于上下文和范式。
例如,在面向对象的编程语言中,您可以定义类型/类的相等性,这有时意味着相等性不再是可传递的。两者都可能是真的。最糟糕的情况甚至可能是这样,但事实并非如此。x == 5
x == 6
x == 6
x
6
评论