Сериализация с плавающей точкой, лексикографическое сравнение - PullRequest
1 голос
/ 09 марта 2011

Я ищу способ сериализации с плавающей запятой, чтобы в их сериализованной форме лексикографическое сравнение было таким же, как сравнение с плавающей запятой. Я думаю, что это возможно, сохранив его в виде:

| signed bit (1 for positive) | exponent | significand |

Показатель степени и значимое будут сериализованы как big-endian, а дополнение будет взято для отрицательных чисел.

Будет ли это работать? Я не против, если это сломается для NaN, но было бы неплохо работать с INF-сравнением.

1 Ответ

3 голосов
/ 09 марта 2011

Формат чисел IEEE специально разработан таким образом, чтобы можно было использовать «простое» целочисленное сравнение.Однако это применимо только при сравнении двух чисел с одним и тем же знаком.

Ваше предложение дополнить числа, если они отрицательные, является обоснованным, поэтому это будет работать.-Inf: s и для ненормальных чисел.NaN: s, однако, не будет работать, или, скорее, они будут считаться «большими», чем inf: s.

Единственный проблемный случай - «-Zero» (т.е.и мантисса = 0).Согласно IEEE, Zero == -Zero.Вы должны решить, хотите ли вы выбросить -Zero как Zero, трактовать их как разные или добавить специальный код в процедуру сравнения.

...