双精度浮点数是两个双精度的总和

时间:2012-03-25 02:20:04

标签: floating-point arbitrary-precision

关注papers and source code for double-double arithmetic一段时间后,我仍然无法确定dd_real(定义为struct dd_real { double x[2];...})数字究竟是如何分成两个双打的。如果我使用字符串dd_real pi = "3.14159265358979323846264338327950";初始化它,那么pi.x[0]pi.xi[1]是什么?我需要理解它,然后编写一个希望小的Python函数来实现它。

我不想只调用QD库的原因是我更喜欢在Python中重新实现正确的分割,以便将我的35位精度常量(以字符串形式给出)发送为{{1}对于CUDA代码,它将被GQD library视为双重实数 - 似乎是唯一一个处理CUDA中扩展精度计算的库。不幸的是,在Python方面也排除了mpmath。

1 个答案:

答案 0 :(得分:5)

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

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

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

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