0

我有一个union定义如下:

union V64
{
    double f64;
    __int64 i64;
    unsigned __int64 u64;
};

我想对未知类型的 8 字节值与另一个V64已知类型的值进行惰性比较(相等和不等)。无论基础类型如何,比较i64两个V64s 是否会始终如一地给我预期的结果?例如:

V64 a.u64 << 9007199254740993+500;  //pseudo-code reading raw bytes
V64 b.u64 << -9007199254740993-501; //pseudo-code reading raw bytes
if(a.i64 > b.i64)
{/*do stuff*/}

比较u64在一个为负数f64时崩溃,当值超过double's intstorage (2^53 +1)时比较崩溃。比较i64似乎有效,但可能有一个我没有考虑过的情况。

4

1 回答 1

4

分配给相同类型的两个成员后,您可以比较它们:

a.f64 = 5.0;
b.f64 = -1.0;

if (a.f64 < b.f64) { /* ... */ }

您只能读取最后写入的工会成员。因此,您可以比较a.f64and c.u64,但这只会将两个值提升为double

于 2013-04-18T19:44:47.230 回答