断言等于精度
assertEquals Precision
我对 assertEquals
中的 delta/precision 感到困惑。
我知道 0.034
会给我除法代码的精度,如下所示:
public void testDivide() {
assertEquals(3.0, Arithmetic.divide(12.0, 4.0), 0.0);
assertEquals(3.3, Arithmetic.divide(10.0, 3.0), 0.034);
//fail("Not yet implemented");
}
但是,我尝试将其更改为0.03
,但测试失败。另一方面,我改成0.04
就成功了,或者改成0.034444
之类的也成功了。
我可以知道这个数字是什么意思,我们如何使用它?
您正在使用:
assertEquals
(double expected, double actual, double epsilon)
由于 doubles may not be exactly equal 在任何语言中(精度问题),epsilon 允许您描述它们必须有多接近。
Epsilon 定义 为与 expected
结果的最大偏差:
Math.abs(expected - actual) < epsilon
所以从本质上讲,它允许您偏离 expected
结果(3.0
或 3.3
在您的情况下)
Arithmetic.divide(12.0, 4.0) - 3.0 = 3.0 - 3.0 = 0
和
Arithmetic.divide(10.0, 3.0) - 3.3 ≈ 3.3333333 -3.3 ≈ 0.3333333
分别
因此,如您所见,在第一个中,实际上不需要 epsilon,因为 expected
和 actual
结果完全相同。
在第二个中,您应该允许一些偏差,因为您看到 actual
结果比 expected
大约 >
乘 0.33333
。
根据: http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(double, double, double)
**delta** - the maximum delta between expected and actual for which both numbers are still considered equal.
增量 = 0.3
现在,Arithmetic.divide(10.0,3.0) - 3.0
= 0.333..
即 greater than 0.3
,因此 assertEqual()
失败
增量 = 0.4
现在,Arithmetic.divide(10.0,3.0) - 3.0
= 0.333..
即 LESSER than 0.4
,所以 assertEqual()
通过
我对 assertEquals
中的 delta/precision 感到困惑。
我知道 0.034
会给我除法代码的精度,如下所示:
public void testDivide() {
assertEquals(3.0, Arithmetic.divide(12.0, 4.0), 0.0);
assertEquals(3.3, Arithmetic.divide(10.0, 3.0), 0.034);
//fail("Not yet implemented");
}
但是,我尝试将其更改为0.03
,但测试失败。另一方面,我改成0.04
就成功了,或者改成0.034444
之类的也成功了。
我可以知道这个数字是什么意思,我们如何使用它?
您正在使用:
assertEquals
(double expected, double actual, double epsilon)
由于 doubles may not be exactly equal 在任何语言中(精度问题),epsilon 允许您描述它们必须有多接近。
Epsilon 定义 为与 expected
结果的最大偏差:
Math.abs(expected - actual) < epsilon
所以从本质上讲,它允许您偏离 expected
结果(3.0
或 3.3
在您的情况下)
Arithmetic.divide(12.0, 4.0) - 3.0 = 3.0 - 3.0 = 0
和
Arithmetic.divide(10.0, 3.0) - 3.3 ≈ 3.3333333 -3.3 ≈ 0.3333333
分别
因此,如您所见,在第一个中,实际上不需要 epsilon,因为 expected
和 actual
结果完全相同。
在第二个中,您应该允许一些偏差,因为您看到 actual
结果比 expected
大约 >
乘 0.33333
。
根据: http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(double, double, double)
**delta** - the maximum delta between expected and actual for which both numbers are still considered equal.
增量 = 0.3
现在,Arithmetic.divide(10.0,3.0) - 3.0
= 0.333..
即 greater than 0.3
,因此 assertEqual()
失败
增量 = 0.4
现在,Arithmetic.divide(10.0,3.0) - 3.0
= 0.333..
即 LESSER than 0.4
,所以 assertEqual()
通过