c++ - 长位加倍

扫码查看

我有一个unsigned long long(或uint64_t)值,并想将其转换为double。 double 型应具有与long值相同的位模式。这样,我可以“手动”设置double的位。

unsigned long long bits = 1ULL;
double result = /* some magic here */ bits;

我正在寻找一种方法来做到这一点。

最佳答案

便携式的方法是使用memcpy(您也可以有条件地使用reinterpret_cast或并集来进行此操作,但是由于它们违反了严格别名规则的含义,因此不确定它们是可移植的):

// First, static assert that the sizes are the same
memcpy(&result, &bits, sizeof(bits));

但是在您做之前,请确保您确切地知道自己在做什么以及正在使用哪种浮点表示(尽管IEEE754是一种流行/常见的选择)。您将要避免各种问题值,例如无穷大,NaN和非正规数。

07-28 02:02
查看更多