pragnę stworzyć HashSet
dla liczb rzeczywistych (obecnie Double
s) stosując określoną tolerancję (epsilon
), (cf Assert.assertEquals(double, double, double)
Ponieważ korzystanie Double.equals()
działa tylko na dokładnym równości i Double
jest ostateczna klasa Moim początkowym pomysłem jest rozszerzenie HashSet
(np. Do DoubleHashSet
) przy użyciu metody setEpsilon(double)
i utworzenie nowej klasy ComparableDouble
, gdzie equals()
używa tej wartości z DoubleHashSet
. Chciałbym jednak sprawdzić, czy istnieją istniejące rozwiązania już istniejące biblioteki F/OSS:Tworzenie HashSet dla Doubles
(W W przyszłości będę chciał rozszerzyć to na krotki liczb rzeczywistych - np. prostokąty i sześciany - dlatego preferowane jest podejście ogólne
UWAGA: @NPE zasugerowało, że jest to niemożliwe. Niestety podejrzewam, że jest to formalnie poprawne :-) Więc zastanawiam się, czy istnieją przybliżone metody ... Inni musieli mieć ten problem i rozwiązać go w przybliżeniu. (Używam już regularnie narzędzia Real.isEqual(a, b, epsilon)
i jest bardzo użyteczne.) Jestem gotów zaakceptować kilka rzadkich błędów przechodniości.
UWAGA: Będę używał zestawu drzewiastego, ponieważ rozwiązuje to problem "prawie równy()". Później będę porównywał złożone liczby, prostokąty (i bardziej złożone obiekty) i naprawdę warto jest ustawić limit, w którym 2 rzeczy są równe. Nie ma prostego naturalnego uporządkowania złożonych liczb (może działałoby podejście Cantora), ale możemy stwierdzić, czy są one prawie równe.
You wydaje się być na właściwej drodze. Rozszerzenie Double i zapewnienie równego wdrożenia wydaje się właściwym podejściem. – anubhava
@anubhava OK - dodam kod fikcyjny do komentarza –
@anubhava usunąłem kod, ponieważ inne odpowiedzi zastępują go –