使用long double
我得到18/19 = 0.947368421052631578...
,947368421052631578
是重複小數。使用double
我得到0.947368421052631526...
但是,前者是正確的。爲什麼這樣的結果不正確?double和precision
感謝您的幫助。
使用long double
我得到18/19 = 0.947368421052631578...
,947368421052631578
是重複小數。使用double
我得到0.947368421052631526...
但是,前者是正確的。爲什麼這樣的結果不正確?double和precision
感謝您的幫助。
A double
通常提供16(±1)個十進制數字。您的示例顯示了這一點:
4 8 12 16
v v v v
0.947368421052631578 long double
0.947368421052631526 double
答案同意爲16位數字。這是應該預料的。另請注意,C標準中沒有保證long double
比double
更精確。
您試圖用有限的位數表示每個十進制數。有些東西不能完全以浮點形式表達。期待與浮游物確切的答案是你的第一個問題。看看What Every Computer Scientist Should Know About Floating-Point Arithmetic
這裏有一個總結,從some lecture notes:
正如前面提到的,計算機不能精確代表實數,因爲有位用於存儲實數只有有限數量。因此,任何具有無限數字的數字如1/3,2的平方根和PI都不能完全表示。而且,由於編碼實數的方式,即使是有限數量的數字也不能精確表示。
double
甲其通常與IEEE 754實現將是準確的,以15和17之間的十進制數字。即使你可以讓編譯器顯示它,任何過去都不可信的東西。
讓我重新解釋一下你的問題:你很驚訝「長雙倍」比「雙倍」更精確? – raina77ow