2011-10-09 90 views
3

下面的這兩個例子都有8位有效數字,但第一種情況並沒有給出任何警告,而第二種情況的確如此,爲什麼?漂浮點在或超出範圍?

float f1 = 11111111; 
float f2 = 99999999; 

float數據類型是否有7或8個有效數字?

回答

8

檢出this article:IEEE754 32位浮點數有一個24位尾數(提示省略前導1)。現在2 是16'777'216。這意味着你的第一個數字11'111'111很適合,但第二個數字不適用。

不幸的是二進制數與小數不一樣,所以在討論精度時,大多數時候我們真的在談論二進制數字,而浮點數有24個重要數字。 (這裏有一個「二進制數字」的簡寫,它可以逃避我)。轉換的結果是log10,大約是3.32,所以你得到了「7.22個十進制數字」。

+4

您正在尋找'位'的速記? – 0x5f3759df

+0

感謝您的文章。它似乎比我想象的要複雜一點。 – user103214

+1

@ 0x5f3759df:就是這樣,謝謝! user9:睡在它上面,它實際上非常明智,而且設計得非常巧妙。例如,IEEE浮點值按照與它們的位模式相同的順序進行排序,這很棒;並且+零由全零位模式表示。 –