assertEquals精度

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等等,它也会成功.我可以知道数字是什么意思,我们如何使用它?

Ido*_*dos 8

您正在使用:

assertEquals(double expected, double actual, double epsilon)

由于双语在任何语言中可能不完全相同(精度问题),因此epsilon允许您描述它们的接近程度.

Epsilon被定义为与expected结果的最大偏差:

Math.abs(expected - actual) < epsilon
Run Code Online (Sandbox Code Playgroud)

因此,在本质上它可以让你从偏离expected的结果(3.03.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分别.

因此,在第一个,你看,实际上是没有必要的,因为小量的expectedactual结果是完全一样的.在第二个你应该允许一些偏差,你看到的actual结果约等于>通过0.33333expected一个.