【发布时间】:2014-11-02 18:21:27
【问题描述】:
假设有一堆浮点数,那么它们可以按从小到大的排序(即排序)。
如果我将 [1, 2] 浮点数“转换”为如下所示的整数,它们会保持相同的顺序吗?我的意思是,从比较实际位的角度来看,它会保留排序顺序吗?
union number {
uint64_t i; // [3]
double f;
};
在根据i 和f 排序时,当我对number 的数组进行排序时,我会得到相同的排序吗?
换句话说,如果:
x.f < y.f
它总是这样认为吗:
x.i < y.i
?
[1] 从我读到的,实际的术语是"type punning"
[2] 我不能简单地“转换”(如uint64_t i = (uint64_t)f),因为这只会截断浮点数,对吧?
[3] 它对int64_t 和uint64_t 都有效吗?
【问题讨论】:
-
关于 [3]:它甚至不适用于
int64_t和uint64_t之间的类型双关语。 -
你到底想达到什么目的?
-
您可以进行逐位比较,但要小心。首先根据最高有效位进行分区,然后适当处理正负双精度。
-
不,
int64_t,也不起作用... -
@2501 "radix sort floating point" 给出了一组很好的结果...确切地说,我不是在谈论基数排序,但是是的,这也是一个应用程序.. .
标签: c casting floating-point ieee-754