【发布时间】:2021-07-14 19:01:33
【问题描述】:
我有一个可耻的幼稚问题:将uint32_t 转换为介于0 和1 之间的double 的最佳方法是什么?
我的幼稚方式是
double myconvert(uint32_t a)
{
double n = static_cast<double>(std::numeric_limits<uint32_t>::max() - std::numeric_limits<uint32_t>::min());
return static_cast<double>(a) / n;
}
但我想知道是否有更好的方法?
【问题讨论】:
-
也许我已经过时了,但我发现
static_cast<double>的数学代码难以阅读。我更喜欢在开始时使用1.0隐式提升一个术语中的所有系数。 -
嗯。天真和过时......这有点推动它。 :-)
-
我不明白目的。因此,您将 uint32 输入转换为双精度,然后将其除以 0x41EFFFFFFE00000,这是最大 uint32 转换为双精度。
-
请注意,问题中的代码中的任何强制转换都不需要。
-
客观而言,您认为哪个更好?
标签: c++