我有一个浮动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
这会起作用吗? 这会导致精度损失吗? 有没有更好的方法来实现相同的结果?
答案 0 :(得分:2)
类型转换(unsigned int) z_f
的优先级高于二进制*
,因此您实际上将MAX_UINT32
乘以0或1。
答案 1 :(得分:2)
z_f
有许多可能的值会映射到同一个整数(想想很多浮点数非常接近于零)。这可能会影响排序顺序。
还有@Oswald指出的优先级错误。
至于更好的方法,我不确定(除了将数字保持为浮点数)。
答案 2 :(得分:0)
出于优先原因,我首先会避免使用C样式转换。第二件事是,由于存在问题,您不希望在float
上执行此操作,而是在double
中。
unsigned int z_ui
= static_cast<unsigned int>(satic_cast<double>(z_f)*MAX_UINT32);