我在(0,1)
范围内有一个 double ,我想扩展到32位 unsigned int (0,0xFFFFFFFF)
的整个范围
如何在C ++中执行此操作?我不关心边缘情况,只要结果没有任何令人讨厌的溢出。
由于
答案 0 :(得分:2)
使用C ++ 11' s lround
:
uint32_t convert_to(double v) {
return std::lround(v * std::numeric_limits<uint32_t>::max());
}
double convert_from(uint32_t v) {
return static_cast<double>(v) / std::numeric_limits<uint32_t>::max();
}
没有lround
(round() for float in C++):
uint32_t convert_to(double v) {
return std::floor(v * std::numeric_limits<uint32_t>::max() + 0.5);
}
答案 1 :(得分:1)
嗯,你可以简单地做到这一点
unsigned int result = (unsigned int)std::floor(
std::numeric_limits<unsigned int>::max() * yourDoubleInRange01 );