提问人:rych 提问时间:3/25/2012 最后编辑:phuclvrych 更新时间:9/10/2020 访问量:3926
双精度浮点数为两个双精度之和
double-double precision floating point as sum of two doubles
问:
一段时间以来,我仍然无法找到dd_real(定义为)数如何被拆分为两个双精度的。比如说,如果我用字符串初始化它,会是什么 和 ?我需要理解它,然后编写一个希望很小的 Python 函数来做到这一点。struct dd_real { double x[2];...}
dd_real pi = "3.14159265358979323846264338327950";
pi.x[0]
pi.xi[1]
我不仅想调用 QD 库的原因是,我更愿意在 Python 中重新实现正确的拆分,以便我将我的 35 位精度常量(以字符串形式给出)发送到 CUDA 代码,其中它将被 GQD 库视为双双实数——似乎是唯一的库, 在 CUDA 中处理扩展精度计算。不幸的是,在 Python 方面,这也排除了 mpmath。double2
答:
6赞
Pascal Cuoq
3/25/2012
#1
假设你用二进制数初始化你的:double double
1.011010101111111010101010101010000000101010110110000111011111101010010101010
< --- 52 binary digits --- >< --- more digits --- >
然后一个是,另一个是double
1.0110101011111110101010101010100000001010101101100001
1.1011111101010010101010 * 2^-53
当您将这两个数字(作为实数)相加时,总和是初始值。第一个在其 52 位尾数中包含尽可能多的位。第二个包含剩余的位,并具有适当的指数。
评论
pi.x[0]
pi.x[1]
double double