1

我有一个z_f介于 0.0f 和 1.0f 之间的浮点数,我想将其转换为保持排序顺序的无符号整数。

一个简单的方法可能是:

float z_f = 0.5;
unsigned int z_ui = (unsigned int) z_f*(MAX_UINT32);//Scale to full range of uint32

这行得通吗?
这会导致精度损失吗?有没有更好的方法来达到相同的结果?

4

3 回答 3

2

类型转换(unsigned int) z_f的优先级高于 binary *,因此您实际上是在乘以MAX_UINT320 或 1。

于 2013-10-31T15:42:10.400 回答
2

有许多可能的值z_f会映射到同一个整数(想想许多非常接近零的浮点数)。这可能会影响排序顺序。

@Oswald 还指出了优先级错误。

至于更好的方法,我不确定(除了将数字保持为浮点数)。

于 2013-10-31T15:42:29.540 回答
0

出于优先考虑,我首先会避免使用 C 风格的演员表。第二件事是,由于精度问题,您不想在 a 上执行此操作float,而是在double.

unsigned int z_ui 
                 = static_cast<unsigned int>(satic_cast<double>(z_f)*MAX_UINT32);
于 2013-10-31T16:36:25.913 回答