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 簡單說說國內重男輕女的假象 嫁出去的女兒潑出去的水 這是一句俗話,深入人心 現代社會,物質生產跟上來了,女兒們開始反哺原生家庭了,於是也出現了農村地區殺男嬰的故事 先說說古代為何 重男輕女 因為女兒不顧原生家庭 在物質匱乏的古代,生存本來就是一件難事,讓女人來顧家是不可能的 怎麼得出這個...
為什麼那麼焦慮?為什麼那麼勢利?為什麼那麼急於成功?
個人感覺最重要的是人在社會中的安全感。其實真不是每個人都那麼地渴望成功,而且成功的定義本來就是多種多樣的。但在中國,如果你沒有達到廣泛定義上的 成功 你可能會有以下的結果 你可能在城市中會隨時沒有安身之所,你可能會遭受不公但投訴無門,你的父母至親可能患病也得不到最基本救助,你的孩子可能得不到平等的教...
我為什麼是我?為什麼?
主角戲 馬克思說過,人是所有社會關係的總和,所以首先,你作為人來說,你只是你周圍所有關係的總和,你的偏執,你的瘋狂,你的愛情,你的孝順,你的所有人生觀,價值觀,世界觀,宇宙觀,形成了你。但是你錯誤的把這些當成了你,其實這些都是人的錯誤認識,心 的本體,也就是能生萬物,能生萬法的這個東西沒有被發現之前...