通過分數形式避免浮點數在運算過程中的累計誤差

2021-06-12 21:04:16 字數 540 閱讀 7530

直接上**,更複雜形式請自行修改:

//有誤差的浮點數累計運算

double c = 0.1d;

for (int i = 0; i < 10000; i++)

console.writeline(c);

console.writeline(0.1d + 0.1d * 10000);

/*結果為:

1000.10000000016

1000.1

請按任意鍵繼續. . . */

//下面,同樣適用迴圈,用分數的形式來避免誤差

int a = 1, b = 10;//1/10=0.1

for (int i = 0; i < 10000; i++)

console.writeline((double)a/b);

console.writeline(0.1d + 0.1d * 10000);

/*結果為:

1000.1

1000.1

請按任意鍵繼續. . . */

11076 浮點數的分數表達

description 在計算機中,用float或double來儲存小數有時不能得到精確值,若要精確表達乙個浮點數的計算結果,最好用分數來表示小數,有限小數或無限迴圈小數都可以轉化為分數,無限迴圈小數的迴圈節用括號標記出來。如 0.9 9 10 0.3 0.3 3 0.3 33 1 3 當然乙個小數...

浮點數在記憶體中的儲存形式

浮點數 浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。...

浮點數在記憶體中的儲存形式

浮點數 浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。...