Che cosa significa per due doppi essere "approssimativamente uguali?" Significa che i doppi sono all'interno di una certa tolleranza l'uno dell'altro. La dimensione di tale tolleranza e se tale tolleranza è espressa come numero assoluto o percentuale dei due doppi, dipende dalla tua applicazione.
Ad esempio, due foto visualizzate su un visualizzatore di foto hanno approssimativamente la stessa larghezza in pollici se occupano lo stesso numero di pixel sullo schermo, quindi la tolleranza sarà un numero assoluto calcolato in base alla dimensione dei pixel per lo schermo . D'altro canto, i profitti di due società finanziarie sono probabilmente "approssimativamente uguali" se si trovano nello 0,1% l'uno dell'altro. Questi sono solo esempi ipotetici, ma il punto è che dipende dalla tua applicazione.
Ora per qualche implementazione. Supponiamo che la tua applicazione richieda una tolleranza assoluta. Quindi è possibile utilizzare
private static final double TOLERANCE = 0.00001;
public static boolean approxEqual(final double d1, final double d2) {
return Math.abs(d1 - d2) < TOLERANCE;
}
per confrontare due doppie, e utilizzare
approxEqual(d1, d2) && approxEqual(d1, d3) && approxEqual(d1, d4) && approxEqual(d1, d5)
per confrontare cinque doppie.
fonte
2012-02-01 03:59:00
si può dire di più sul contesto? Stai facendo questo da un test unitario? In tal caso, uno degli assertEquals in JUnit ha proprio un tale metodo per affermare che due doppi sono vicini. –
Grazie a tutti per le risposte. Quindi sì, sto provando a fare un test delle unità, e il mio metodo restituisce il tempo in cui alcuni numeri interi vengono aggiunti a un array. Voglio testare questo metodo con diverse quantità di numeri interi e confrontare i tempi. Immagino che il metodo ulp() possa funzionare. – FranXh