2012-03-25 138 views
1

跟着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位精度常量(以字符串形式給出)作爲double2發送給CUDA代碼在那裏將被視爲雙重雙精度,由GQD library處理 - 似乎是處理CUDA中的擴展精度問題的唯一庫。不幸的是,在Python方面,也排除了mpmath。

+0

如果您以二進制或十六進制格式舉例,它會更容易。即使某人從字面上回答了你的問題(通過告訴你「pi.x [0]」和「pi.x [1]」的值),你將無法理解關於原始十進制值。 – 2012-03-25 03:53:22

+0

另請注意,double double決不是「任意精度」。這只是「更精確的IEEE 754雙精度,同時利用可用的雙精度硬件」。 – 2012-03-25 04:05:01

回答

5

說你初始化double double用二進制數:

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

然後一個double1.0110101011111110101010101010100000001010101101100001 和其他將是1.1011111101010010101010 * 2^-53

當您添加這兩個數(爲實數),總和是初始值。第一個在52位尾數中包含儘可能多的位。第二個包含剩餘的位,並帶有適當的指數。