Сравнение с плавающей запятой двойной точности

Будут ли работать правильно, когда они хранятся как непрозрачные (двоичные) поля? Проблема, с которой я столкнулся, заключается в том, что двойное число включает в себя ведущий бит для знака (т.е. положительный или отрицательный), и когда они хранятся как двоичные данные, я не уверен, что они будут сравниваться правильно:

enter image description here

Я хочу чтобы гарантировать, что сравнение будет работать правильно, потому что я использую double как часть ключевого кортежа (например) в LevelDB , и я хочу сохранить локальность данных для положительных и отрицательных чисел. LevelDB использует только непрозрачные поля в качестве ключей, но позволяет пользователю указать свой собственный компаратор. Однако я просто хочу убедиться, что не укажу компаратор, если мне это не понадобится:

// Three-way comparison function:
//   if a < b: negative result
//   if a > b: positive result
//   else: zero result
inline int Compare(const unsigned char* a, const unsigned char* b) const 
{
    if (*(double*)a < *(double*)b) return -1;
    if (*(double*)a > *(double*)b) return +1;
    return 0;
}

8
задан Kiril 14 November 2011 в 05:24
поделиться