我有点困惑- 当double类型被存储为不透明(二进制)字段时,它们的比较是否仍然能够正确进行?我面临的问题是double类型包含一个用于表示正负的前导位,当它们以二进制数据形式存储时,我不确定它们是否会被正确比较:
// 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;
}
NAN
,那么这将失败,因为NAN!= NAN
。另一件事是要注意对齐方式。并非所有系统都支持未对齐访问。 - MysticialNAN
。那么我的假设是正确的吗?我必须为包含双精度浮点数的键指定比较运算符吗? - Kirilconst unsigned char *
而不是const void *
? - Chris Lutzqsort
或类似的函数。 - Chris Lutz