為什麼0 1 0 2 0 30000000000000004而1 1 2 2 3 3000000000000003?

時間 2021-06-01 05:24:30

1樓:不落的彷徨

看這個吧,特別詳細,樓上的回答都看不懂

2樓:

不管是什麼數, 在計算機中最終都會被轉化為 0 和 1 進行儲存, 所以需要弄明白以下幾點問題

乙個小數如何轉化為二進位制

浮點數的二進位制如何儲存

浮點數的二進位制表示首先我們要了解浮點數二進位制表示, 有以下兩個原則:

整數部分對 2 取餘然後逆序排列

小數部分乘 2 取整數部分, 然後順序排列

0.1 的表示是什麼?我們繼續按照浮點數的二進位制表示來計算

0.1 * 2 = 0.2 整數部分取 0

0.2 * 2 = 0.4 整數部分取 0

0.4 * 2 = 0.8 整數部分取 0

0.8 * 2 = 1.6 整數部分取 1

0.6 * 2 = 1.2 整數部分取 1

0.2 * 2 = 0.4 整數部分取 0

…所以你會發現, 0.1 的二進位制表示是 0.00011001100110011001100110011……0011

0011 作為二進位制小數的迴圈節不斷的進行迴圈.

這就引出了乙個問題, 你永遠不能存下 0.1 的二進位制, 即使你把全世界的硬碟都放在一起, 也存不下 0.1 的二進位制小數.

浮點數的二進位制儲存Python 和 C 一樣, 採用 IEEE 754 規範來儲存浮點數. IEEE 754 對雙精度浮點數的儲存規範將 64 bit 分為 3 部分.

第 1 bit 位用來儲存符號, 決定這個數是正數還是負數

然後使用 11 bit 來儲存指數部分

剩下的 52 bit 用來儲存尾數

Double-precision_floating-point_format

而且可以指出的是, double 能儲存的數的個數是有限的, double 能代表的數必然不超過 2^64 個, 那麼現實世界上有多少個小數呢? 無限個. 計算機能做的只能是乙個接近這個小數的值, 是這個值在一定精度下與邏輯認為的值相等.

換句話說, 每個小數的儲存(但是不是所有的), 都會伴有精度的丟失.

浮點數計算的問題現在我們可以回顧你提出的問題

0.1 + 0.2 == 0.3

0.1 在計算機儲存中真正的數字是 0.

0.2 是

0.0.3 是

0.這就是為什麼 0.1 + 0.2 != 0.3 的原因

至於 1.1 + 2.2 與之類似。

3樓:boied cool

因為二進位制無法準確的描述十進位制小數. 所以float的運算存在誤差.

1.1+2.2跟0.1+0.2的計算結果不同是因為精度問題. 比如:

1.1= 1000000101E-9

0.1=101011....E-15

(上述數值通過手工計算可能存在問題)

具體題主可以看一下小數在計算機記憶體中的儲存方式.

為什麼要重男輕女,為什麼?

Stunk 簡單說說國內重男輕女的假象 嫁出去的女兒潑出去的水 這是一句俗話,深入人心 現代社會,物質生產跟上來了,女兒們開始反哺原生家庭了,於是也出現了農村地區殺男嬰的故事 先說說古代為何 重男輕女 因為女兒不顧原生家庭 在物質匱乏的古代,生存本來就是一件難事,讓女人來顧家是不可能的 怎麼得出這個...

為什麼那麼焦慮?為什麼那麼勢利?為什麼那麼急於成功?

個人感覺最重要的是人在社會中的安全感。其實真不是每個人都那麼地渴望成功,而且成功的定義本來就是多種多樣的。但在中國,如果你沒有達到廣泛定義上的 成功 你可能會有以下的結果 你可能在城市中會隨時沒有安身之所,你可能會遭受不公但投訴無門,你的父母至親可能患病也得不到最基本救助,你的孩子可能得不到平等的教...

我為什麼是我?為什麼?

主角戲 馬克思說過,人是所有社會關係的總和,所以首先,你作為人來說,你只是你周圍所有關係的總和,你的偏執,你的瘋狂,你的愛情,你的孝順,你的所有人生觀,價值觀,世界觀,宇宙觀,形成了你。但是你錯誤的把這些當成了你,其實這些都是人的錯誤認識,心 的本體,也就是能生萬物,能生萬法的這個東西沒有被發現之前...