Если вы решили написать свой собственный двойной компаратор, есть несколько вещей, о которых следует знать.
Во-первых, равенство с плавающей запятой - очень сложная область. По умолчанию Java не обеспечивает единой математики с плавающей запятой, когда ваш код выполняется на разных виртуальных машинах, хотя это можно сделать с помощью ключевого слова strictfp. Это несоответствие в арифметике с плавающей запятой может вызвать проблемы в приложениях, которые не знают об этом и работают на нескольких виртуальных машинах, взаимодействующих друг с другом, таких как серверы и клиентские коммуникации.
Второй хитрость заключается в том, что компараторы работают с объектами, что означает, что вы будете работать с двойными числами, а не с двойными. Следующие четыре операции приводят к распаковке Double в double: <, <=,> и> =. Следующие два не вызывают распаковку: == и! =. Эти два оператора выполняют сравнения указателей памяти объекта. Итог, вручную распакуйте двойники в двойники перед выполнением сравнений; это значительно уменьшит количество ошибок.