Учитывая 3 IEEE-754 с плавающей точкой a, b, c, которые не +/- INF и не NaN и a < б, можно ли предположить, что а — с < До нашей эры?
Или вы можете привести пример, когда это неверно?
предполагать примерно 0,00000000000000001, б приблизительно 0,00000000000000002, и с равен 1. Тогда — с а также б — с оба будут равны -1.
(Это предполагает, что значения с двойной точностью, например, 64-битные. Для значений с более высокой точностью вам нужно добавить еще несколько нулей.)
Отредактировано, чтобы добавить объяснение:
Если мы игнорируем денормализованные значения и не-числовые значения и бесконечности и так далее, и просто сосредоточиться на IEEE 754 значение с плавающей точкой двойной точности для того, чтобы иметь что-то конкретное, на что можно было бы обратить внимание, тогда — с точки зрения двоичного представления, значение с плавающей запятой состоит из знакового бита s (0 для положительного, 1 для отрицательного), показатель одиннадцати бит е (со смещением 1023, так что е= 0 означает 2-1023 а также е= 1023 означает 20, т.е. 1) и 52-битное значение с фиксированной точкой м (представляющий 52 места после двоичной точки, поэтому она колеблется от [0,1) с конечной точностью). Таким образом, фактическое значение представления равно (−1)s × (1 + м) × 2е-1023.
Поскольку значение и является фиксированной точкой и имеет фиксированное число битов, точность очень конечна. Значение, такое как 1.00000000000000001, и значение, такое как 1.00000000000000002, являются идентичными для очень многих мест после запятой — больше мест, чем может содержать значение двойной точности.
Когда вы выполняете сложение или вычитание между очень большим числом и очень маленьким числом (по отношению друг к другу: в нашем примере 1 «очень большое»), в качестве альтернативы, мы могли бы использовать 1 в качестве очень маленького значения и выбрать очень большое значение 10000000000000000), получающийся показатель будет почти полностью определяться очень большим числом, а значение очень маленького числа должно быть соответствующим образом масштабировано. В нашем случае он делится примерно на 1017; так что просто исчезает. Значение и не содержит достаточно битов, чтобы различить это.
Других решений пока нет …