我有一個問題:我需要將 3 個雙數連接成一個唯一的雙數。例如,我有:
a = 40.000000;
b = 56.000000;
c = 10.236330;
我需要以下號碼:40.5610236330. 整數部分由 的前兩個密碼定義a,前兩個十進制密碼是 的整數部分,b其他十進制密碼是 的所有密碼c。我試過:
k = a (b/100) (c/1000);
但由于近似誤差,結果為40.570236。你可以幫幫我嗎?太感謝了!
uj5u.com熱心網友回復:
浮點計算總是會丟失一些精度。
但40.570236不是40.5610236330太多了。
您看到的大錯誤是因為您的代碼中有一個簡單的錯誤。
你需要k = a (b/100) (c/10000);(即c除以10000)
如果你這樣做可能會更清楚k = a (b/100) (c/100/100);
但永遠不要期望浮點計算能 100% 精確。甚至不確定該數字40.5610236330是否可以表示為float/double
此外,他們自己的輸入值可能不精確:
double c = 10.236330;
printf("%.20f\n", c);
輸出:
10.23633000000000059515
uj5u.com熱心網友回復:
雙變數中有足夠的精度來存盤許多 12 位有效數字(盡管您的問題并沒有真正說明有多少位數字c)。
double k= a b * 0.01 c * 0.0001;
將作業。但在顯示時,請務必使用小數點后 10 位的格式(%.10f),以便四舍五入恢復正確的小數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/431177.html
