Я бы хотел убедиться, что у меня есть надежная реализация для равенства: больше, меньше, меньше или равно и больше или равно.
Вы используете двоичную арифметику с плавающей запятой.
Двоичная арифметика с плавающей запятой была разработана для представления физических величин, таких как длина, масса, заряд, время и т. Д.
Предположительно, тогда вы используете двоичную арифметику с плавающей запятой, как и было задумано: для выполнения арифметики по физическим величинам.
Измерения физических величин всегда имеют особую точность, в зависимости от точности устройства, используемого для их измерения.
Поскольку вы - тот, кто предоставляет значения для величин, которыми вы манипулируете, вы - тот, кто знает, каковы «погрешности» для этого количества. Например, если вы указываете величину «высота здания составляет 123,56 метра», то вы знаете, что это с точностью до сантиметра, а не микрометра.
Следовательно, при сравнении двух величин на равенство желаемая семантика должна сказать: «Являются ли эти две величины равными в пределах погрешностей, определяемых каждым измерением?»
Так что теперь у нас есть ответ на ваш вопрос. То, что вы должны сделать, это отслеживать, какая ошибка есть для каждой величины; например, высота здания «в пределах 0,01 от 123,56 метра», потому что вы знаете, насколько точны измерения. Если затем вы получите другое измерение, которое является 123.5587, и хотите узнать, являются ли два измерения "равными" в пределах допустимых отклонений, выполните вычитание и посмотрите, попадает ли оно в допустимое отклонение. В этом случае это так. Если измерения были на самом деле с точностью до микрометра, то они не равны.
Короче говоря: вы единственный здесь, кто знает, что такое допустимые погрешности, потому что вы единственный человек, который знает, откуда появились цифры, которыми вы манипулируете. Используйте любую погрешность, которая имеет смысл для ваших измерений, учитывая точность оборудования, которое вы использовали для его производства.