Сериализация с плавающей запятой, лексикографическое сравнение == сравнение с плавающей запятой

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

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

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

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


person dan_waterworth    schedule 09.03.2011    source источник


Ответы (1)


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

Ваше предложение дополнять числа, когда они отрицательные, разумно, так что это сработает.

Это будет работать для +-Inf:s и субнормальных чисел. Однако NaN:s работать не будут, вернее, они будут считаться «больше», чем inf:s.

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

person Lindydancer    schedule 09.03.2011