1

在一段时间内关注双双运算的论文和源代码,我仍然无法找出 dd_real (定义为struct dd_real { double x[2];...})数字是如何被分成两个双精度数的。假设我用字符串初始化它,anddd_real pi = "3.14159265358979323846264338327950";会是什么?我需要理解它,然后编写一个有希望的小型 Python 函数来完成它。pi.x[0]pi.xi[1]

我不只是想调用 QD 库的原因是我更愿意在 Python 中重新实现正确的拆分,以便将我的 35 位精度常量(以字符串形式给出)double2发送到 CUDA 代码的位置GQD 库将其视为双双实数——似乎是唯一一个处理 CUDA 中扩展精度计算的库。不幸的是,在 Python 方面也排除了 mpmath。

4

1 回答 1

5

假设您double double使用二进制数初始化您的:

1.011010101111111010101010101010000000101010110110000111011111101010010101010
  < ---                 52 binary digits         --- >< --- more digits --- >

然后一个double将是1.0110101011111110101010101010100000001010101101100001 ,另一个将是1.1011111101010010101010 * 2^-53

当您将这两个数字(作为实数)相加时,总和就是初始值。第一个在其 52 位尾数中包含尽可能多的位。第二个包含具有适当指数的剩余位。

于 2012-03-25T03:58:16.410 回答