2011-03-09 5 views
1

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

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

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

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

ответ

3

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

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

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

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

Смежные вопросы