pvo*_*orb 5 c++ double gcc long-integer
我有一个unsigned long long(或uint64_t)值,并希望将其转换为double.double应具有与该long值相同的位模式.这样我就可以"手动"设置双重位.
unsigned long long bits = 1ULL;
double result = /* some magic here */ bits;
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来做到这一点.
Mar*_*k B 15
这样做的便携式方法是memcpy(你也可以有条件地使用它reinterpret_cast或者一个联合,但那些不一定是可移植的,因为它们违反了严格别名规则的字母):
// First, static assert that the sizes are the same
memcpy(&result, &bits, sizeof(bits));
Run Code Online (Sandbox Code Playgroud)
但在此之前,请确保您确切知道您正在做什么以及正在使用什么浮点表示(尽管IEEE754是一种流行/常见的选择).您需要避免使用无穷大,NaN和非正规数等各种问题值.
| 归档时间: |
|
| 查看次数: |
2091 次 |
| 最近记录: |