2014-10-05 69 views
1

如果我有2個雙打x和y並且做z = x/y或z = x * y是精確到15位小數的結果?在C/C++中有多少位小數是2倍精度的乘積/商數精確到

編輯:抱歉,x和y,並使用binary64double爲主管和分割/乘法0和1之間

+0

這取決於什麼是'x'和'y'值? – ouah 2014-10-05 22:45:28

+0

這取決於您輸入的值的準確程度。 – 2014-10-05 22:45:30

+7

[每位計算機科學家應瞭解的浮點算術知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg。 html) – cdhowie 2014-10-05 22:45:45

回答

2

假設2張輸入數都被認爲是沒有錯誤....

如果,如果給定典型的精確數學結果的舍入到最近模式的默認值,結果應該在1/2的unit in the last place之內。

最大的相對誤差是功率(2,53)或5.55e-17的1/2比特。但是用小數打印double有其問題。

scanf能正確所有N顯著的十進制數字的組合,只要N最多DBL_DIG轉換爲double並返回到相同的字符串。對於binary64 double,這是15。

相關等式在C11§5.2.4.2.2中12.「floor((p-1)* log10 b)」 - >floor((53-1)*log(2)) - >floor(15.65) - >15

由於我們的產品/商數僅精確到52.5個二進制數字:floor((52.5-1)*log(2)) - >floor(15.35) - >15

IMO:答案對15位重要小數位是正確的。

注:通常寫成前導數字,小數點和更多14位數乘以10的冪數。

[編輯]

應該是 「只精確到53.5二進制數字:」 floor((53.5-1)*log(2)) - >floor(15.80) - >15。同樣的結果。