sta*_*ack 9 java precision junit assert
我对delta/precision的困惑感到困惑assertEquals.我明白这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");
}
Run Code Online (Sandbox Code Playgroud)
但是,我试图将其更改为0.03,测试失败.另一方面,当我将其更改为0.04成功时,或者即使我将其更改为0.034444等等,它也会成功.我可以知道数字是什么意思,我们如何使用它?
您正在使用:
assertEquals(double expected, double actual, double epsilon)
由于双语在任何语言中可能不完全相同(精度问题),因此epsilon允许您描述它们的接近程度.
Epsilon被定义为与expected结果的最大偏差:
Math.abs(expected - actual) < epsilon
Run Code Online (Sandbox Code Playgroud)
因此,在本质上它可以让你从偏离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分别.
因此,在第一个,你看,实际上是没有必要的,因为小量的expected和actual结果是完全一样的.在第二个你应该允许一些偏差,你看到的actual结果约等于>通过0.33333比expected一个.
| 归档时间: |
|
| 查看次数: |
1282 次 |
| 最近记录: |