雜談 關於浮點數的精度問題

2021-09-22 10:24:27 字數 937 閱讀 7176

1)包裝類float中為什麼有兩個常量來表示最小值:min_value和

min_normal?

個人理解:既然有兩個常量,說明兩個常量表示的數值不一樣,查閱資料後發現,min_value:值為

3.4e-45 的常量,它表示 float 型別能夠表示的最小值。min_normal:儲存 float 型別數值的最小標

準值的常量,即 2-126。                                        

2)double a = 1.0-0.9的結果不精確等於0.1,為什麼?編

程語言精度丟失是老生常談的話題,這也是從c語言等遺留下來的問題。為何浮點數可能丟失精度浮點十

進製值通常沒有完全相同的二進位制表示形式。 這是 cpu 所採用的浮點資料表示形式的***。為此,

可能會經歷一些精度丟失,並且一些浮點運算可能會產生意外的結果。

將乙個float型轉化為記憶體儲存格式的步驟為:

(1)先將這個實數的絕對值化為二進位制格式,注意實數的整數部分和小數部分的二進位制方法在

上面已經**過了。

(2)將這個二進位制格式實數的小數點左移或右移n位,直到小數點移動到第乙個有效數字的右邊。

(3)從小數點右邊第一位開始數出二十三位數字放入第22到第0位。

(4)如果實數是正的,則在第31位放入「0」,否則放入「1」。

(5)如果n 是左移得到的,說明指數是正的,第30位放入「1」。如果n是右移得到的或n=0,則第

30位放入「0」。

(6)如果n是左移得到的,則將n減去1後化為二進位制,並在左邊加「0」補足七位,放入第29到第

23位。如果n是右移得到的或n=0,則將n化為二進位制後在左邊加「0」補足七位,再各位求反,再放入第

29到第23位。

簡單點的說,浮點運算(小數運算)計算結果不準確的原因正是以上過程**現了問題。

本次回答參考的資料:

浮點數精度問題

一 例子 首先我們去編譯器試試 double a 1.9 通過新增監視檢視a的值 會發現a的值是1.8999999 二 開始今天的學習 在最開始學c 的時候並沒有對浮點數進行很深入的學習,認為浮點不就是小數嘛,首先在c 的巨集裡面有 flt max 和 flt min 的定義,float是四位元組的...

浮點數的精度問題

float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 對於二進位制的小數 1.1 1 20 1 2 1 1 1 2 1.5 1.01 1 20 0 2 1 1 2 2 1 1 4 1.25 1.0011 1...

浮點數精度丟失問題

c 中的浮點數,分單精度 float 和雙精度 double float 是 system.single 的別名,介於 3.402823e38 和 3.402823e38 之間的32位數字,符合二進位制浮點演算法的 iec 60559 1989 ieee 754 標準 double 是 system...