关注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。
答案 0 :(得分:5)
假设您使用二进制数初始化double double
:
1.011010101111111010101010101010000000101010110110000111011111101010010101010
< --- 52 binary digits --- >< --- more digits --- >
然后一个double
将是1.0110101011111110101010101010100000001010101101100001
另一个是1.1011111101010010101010 * 2^-53
当您添加这两个数字(作为实数)时,总和是初始值。第一个在52位尾数中包含尽可能多的位。第二个包含剩余的位,具有适当的指数。