ja test JUnit stwierdzając dwa podwójne przedmiotów z:różnica Junit pomiędzy assertEquals (podwójne, podwójne) i assertEquals (dwukrotnie dwukrotnie, delta)
Assert.assertEquals(Double expected, Double result);
To było dobrze wtedy zdecydował się na zmianę zamiast tego użyje prymitywnego double, który okazał się przestarzały, chyba że podasz deltę.
więc zastanawiam się, jaka jest różnica między używaniem obiektu Double lub typu pierwotnego w tym assertEquals? Dlaczego używanie obiektów bez delty jest ok, ale używanie elementów pierwotnych bez delty jest przestarzałe? Czy Java robi coś w tle, które ma już domyślną wartość delty?
Dzięki.
+1 re odprawa, tak, z zastrzeżeniem, że będziesz miał nieco inne zachowanie, jeśli jedno lub drugie podwójne jest zerowe. Dzięki obiektowi otrzymasz ładną wiadomość, z deltą otrzymasz wyjątek NullPointerException. –
Moje doświadczenie jest takie, że te metody nie działają dobrze w przypadku bardzo dużych liczb w pewnych okolicznościach, szczególnie jeśli dane różnią się o kilka rzędów wielkości. Dwie liczby mogą mieć bardzo mały błąd procentowy, ale wymagają dopasowania do pozornie dużej delty. Ale ta sama delta nie zadziałałaby dla dużo mniejszych wartości w twoich danych. W niektórych przypadkach można oczekiwać, że nawet bardzo duże liczby będą pasować do niemal wszystkich cyfr znaczących. W innych przypadkach, na przykład podczas porównywania dwóch zoptymalizowanych algorytmów FFT, jest to znacznie mniej prawdopodobne. Bardziej niezawodną metodą jest ograniczenie błędu względnego. – orodbhen
@orodbhen Aby to działało należy obliczyć delta na podstawie wykładnika wartości oczekiwanej, więc jeśli 'double e' jest wartością oczekiwaną, to delta powinna być' double d = Math.pow (10, Math.log10 (Math. abs (e)) - 12); 'gdzie' 12' to maksymalna praktyczna liczba cyfr znaczących. Jeśli pomnożysz log10 przez wartość <1.0, to test nie powiedzie się dla 'e' mającego duży dodatni wykładnik, a przeciwnie, jeśli pomnożysz log10 przez wartość> 1.0, to zawiedzie dla' e' mającego duży wykładnik ujemny - i to jest efekt, o którym pisałeś. Upewnij się więc, że delta dobrze pasuje do wykładnika wartości oczekiwanej. – Cromax