如果我有2個雙打x和y並且做z = x/y或z = x * y是精確到15位小數的結果?在C/C++中有多少位小數是2倍精度的乘積/商數精確到
編輯:抱歉,x和y,並使用binary64double
爲主管和分割/乘法0和1之間
如果我有2個雙打x和y並且做z = x/y或z = x * y是精確到15位小數的結果?在C/C++中有多少位小數是2倍精度的乘積/商數精確到
編輯:抱歉,x和y,並使用binary64double
爲主管和分割/乘法0和1之間
假設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
。同樣的結果。
這取決於什麼是'x'和'y'值? – ouah 2014-10-05 22:45:28
這取決於您輸入的值的準確程度。 – 2014-10-05 22:45:30
[每位計算機科學家應瞭解的浮點算術知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg。 html) – cdhowie 2014-10-05 22:45:45