c++ - 从长位加倍

标签 c++ gcc double long-integer

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

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

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

最佳答案

执行此操作的可移植方法是使用 memcpy(您也可以有条件地使用 reinterpret_cast 或 union 来执行此操作,但这些不一定是可移植,因为它们违反了严格别名规则的字面意思):

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

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

关于c++ - 从长位加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17409162/

相关文章:

c++ - C/C++ Posix tcp/ip 网络客户端,只连接本地主机

c++ - 使用IE引擎下载页面+使用POST

c++ - 打印 Visual Studio 用于编译文件的整个命令

c++ - 从文件中填充结构

linux - 如何使用 autotools、make 和 gcc 在 64 位 (Ubuntu 12.04LTS) Linux 上编译和安装 32 位库?

linux -/usr/bin/ld : attempted static link of dynamic object `/usr/lib64/libm.so'

Java:双重与 float

java - 在 Java 中将 Java 打印成 System.out

c - 如何用 C 编译简单的 gearman worker?

c# - 为什么将 double.epsilon 添加到一个值会产生相同的值,完全相等?