Насколько я понимаю,
- Двойные числа в C ++ (по крайней мере концептуально) кодируются как числа с плавающей запятой в кодировке IEEE 754 двойной точности.
- IEEE 754 говорит, что такие числа могут быть представлены с помощью 64 бит.
Поэтому я должен ожидать, что существует функция f
, которая может сопоставлять каждый дубль уникальному uint64_t, и этот порядок должен поддерживаться, а именно - для всех double lhs, rhs
, lhs < rhs == f(lhs) < f(rhs)
кроме случаев, когда (lhs
или rhs
равно NaN
).
Мне не удалось найти такую функцию в ответе библиотеки или StackOverflow, хотя такая функция, вероятно, полезна, чтобы избежать создания дополнительного шаблона для двойников в алгоритмах сортировки, где double
встречается редко, так какключ сортировки.
Я знаю, что простое деление на EPSILON не сработает, потому что точность на самом деле уменьшается по мере того, как числа становятся больше (и улучшается, когда числа очень близки к нулю);Тем не менее, я не совсем точно определил детали этого масштабирования.
Конечно, такая функция существует в принципе.
Разве я не нашел его, потому что он не может быть написан на стандартном C ++?Что это будет слишком медленно?Что это не так полезно для людей, как я думаю?