假设有一堆浮点数,那么它们可以通过orderer从最小到最大(即排序)。
如果我"转换" [1,2]浮点数到下面的整数,它们会保持相同的顺序吗?我的意思是,从比较实际位的角度来看,它会保留排序顺序吗?
union number {
uint64_t i; // [3]
double f;
};
根据number
和i
进行排序时排序f
时,我会得到相同的排序吗?
换句话说,如果:
x.f < y.f
是否始终如此:
x.i < y.i
[1]根据我的阅读,实际用语是"type punning"
[2]我不能简单地&#34;演员&#34; (如在uint64_t i = (uint64_t)f
中)因为这将简单地截断浮点数,对吗?
[3]它是否适用于int64_t
和uint64_t
?
答案 0 :(得分:4)
换句话说,如果:x.f < y.f
确实如此:x.i < y.i
?
不,这不适用于负浮动。例如,-1是0xbff0000000000000,-2是0xc000000000000000。