私はここで少し混乱しています. double が不透明 (バイナリ) フィールドとして格納されている場合でも、double の比較は正しく機能しますか? 私が直面している問題は、double には符号 (正または負) の先行ビットが含まれており、それらがバイナリ データとして格納されている場合、正しく比較されるかどうかわからないという事実です。
LevelDB のキー タプル (例: )の一部として double を使用しており、正と負の数値のデータの局所性を維持したいので、比較が正しく機能することを確認したいと考えています。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;
}