首先,我是 C 的完全初學者,之前有 Java 和 Python 編程經驗。該程式的目標是添加 2 個數字。在我玩代碼時,我遇到了一個精度問題。問題是當我添加 2 個數字時引起的 - 一個是浮點資料型別,另一個是雙資料型別。
代碼:
#include <stdio.h>
int main() {
double b=20.12345678;
float c=30.1234f;
printf("The Sum of %.8f and %.4f is= %.8f\n", b, c, b c);
return 0;
}
輸出:
20.12345678 和 30.1234 的總和是 = 50.24685651
但是,正確的輸出應該是:50.246856 78
浮點值精確到小數點后 6 位,輸出也是如此。我嘗試將值顯式轉換為 double 型別,但它仍然沒有用。
PS:當我將變數型別從float轉換為double時,輸出是精確的;但是有沒有其他方法可以添加浮點和雙整數而不會弄亂它們的資料型別?謝謝你。
uj5u.com熱心網友回復:
分配給的值c無法準確表達,因此分配給下一個最接近的值。列印到小數點后 4 位時您看不到,但列印 8 位時確實會看到:
printf("The Sum of %.8f and %.8f is= %.8f\n", b, c, b c);
輸出:
The Sum of 20.12345678 and 30.12339973 is= 50.24685651
因此,30.1234f對于您要進行的計算,該常數已經不夠精確。
uj5u.com熱心網友回復:
float僅保證 6 位十進制數字的精度,因此任何帶有 a 的計算float(即使其他運算元是double,即使您將結果存盤到 a double)也只能精確到 6 位。
如果您需要更高的精度,請將自己限制在double或long double。如果您需要超過 10 個十進制數字的精度,那么您將需要使用本機浮點型別和庫函式以外的其他東西。您要么需要自己動手,要么使用像 GNU MP 這樣的任意精度數學庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324784.html
上一篇:為什么我在實作strcat()時得到了錯誤的源字串輸出?
下一篇:C中的雙陣列
