Jscience Реальное сравнение возвращает false, даже если значения равны

Вот мой код:

Real AB = adj[a].get(b);
System.out.println("AB " + AB);
Real AC = adj[a].get(c);
System.out.println("AC " + AC);
Real BC = adj[b].get(c);
System.out.println("BC " + BC);
System.out.println(AB.plus(BC));
System.out.println(AB.plus(BC).equals(AC));

И вот вывод:

AB 2.2360679775
AC 6.7082039325
BC 4.4721359550
6.7082039325
false

Хотя числа идентичны, почему он возвращает false? Я также пробовал

System.out.println(AB.plus(BC).compareTo(AC) == 0);

Опять же, false.

1 ответ

Реализация equals() для Real проверяет идентичные значения, ошибки и экспоненты. Вместо этого используйте approximates(), которые "учитывают возможные ошибки (например, числовые ошибки)".

Добавление: См. Также эти статьи относительно сравнения с плавающей запятой:

licensed under cc by-sa 3.0 with attribution.