簡體   English   中英

assertEquals精度

[英]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)

由於雙語在任何語言中可能不完全相同 (精度問題),因此epsilon允許您描述它們的接近程度。

Epsilon 定義為與expected結果的最大偏差:

Math.abs(expected - actual) < epsilon

所以從本質上講,它允許你偏離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

因此,在您看到的第一個中,實際上不需要epsilon,因為expectedactual結果完全相同。 在第二個你應該允許一些偏差,你看到actual結果是大約>0.33333expected一個。

根據: 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.

for delta = 0.3現在, Arithmetic.divide(10.0,3.0) - 3.0 = 0.333..greater than 0.3 ,所以assertEqual()失敗

for delta = 0.4現在, Arithmetic.divide(10.0,3.0) - 3.0 = 0.333.. LESSER than 0.4 ,所以assertEqual()通過

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM