1 回答

TA貢獻1802條經驗 獲得超10個贊
“浮動”點意味著您的數字的小數部分的位數可以更改以“盡可能最好地”表示您的數字,因為它的大小有限制。
讓我們暫時忘記float數據類型的 4 個字節,并假設您的“浮點數”類型最多可以存儲 10 位數字加上負號。-9 999 999 999
這意味著您可以準確地表示從 :到 的數字+9 999 999 999
。-999 999 999.9
但是,如果你想要一位小數,你可以準確地表示從到 的數字+999 999 999.9
。如您所見,范圍已有效更改。
現在,讓我們通過討論有效數和指數來正式說明一下:
有效數字包含您的有效數字
指數表示 10 乘數的指數,或者,如果它更容易,則表示您必須將小數點移動多少個位置(0 剛好在第一個有效數字之前)。
假設您的“浮點數”數據類型的有效數最多可以有 4 位,指數也最多可以有 1 位,再加上significand和exponent中的減號。您將能夠表示從-0.9 999 * 10^9 = -999900000
到 的數字+0.999 9 * 10^9 = +999900000
。正如您所看到的,雖然數字非常大,但您無法準確表示大多數大數字,因為您只有 4 位數字可用于表示。這種精度損失可以通過表示非常小的數字的能力來補償,例如您可以表示0.999 9 * 10^-9 = 0.000 000 000 999 9
.
這解釋了為什么盡管大小只有 4 個字節但范圍如此之大,如您的問題所述。
為了完善您對此事的了解,請將上述概念轉化為二進制(您的典型float
使用 4 位表示指數,23 位表示有效數,1 位表示有效數的符號)。
維基百科是一個很好的起點。通常,編程目的的主要收獲是了解給定數據類型(您的“精度”)可以存儲多少個小數位,因為這將決定哪種特定的小數格式最適合您的目的。
請注意,理解二進制系統中浮點數的概念在信息技術中非常重要,因為即使是最簡單的計算也會受到它的嚴重影響。
在計算機(二進制)上表示的浮點數是例如編寫如下內容的原因:
public class MyClass {
? ? public static void main(String args[]) {
? ? ? double x=0.1f;
? ? ? double y=0.2f;
? ? ? double z=0.3f;
? ? ? if(x+y == z) {
? ? ? ? ? System.out.println("something");
? ? ? }
? ? ? else {
? ? ? ? ? System.out.println("something else");
? ? ? }
? ? }
}
將反直覺輸出something else,但如果您開始玩數字或將類型更改為浮點數,它將產生正確的輸出。
所以請注意:您需要完全理解這個概念。
添加回答
舉報