如果我們計算下面這程式
sum
=0.7
+0.1
+0.1
+0.1
print
(sum==1
)
我們的主觀直覺會輸出 true 但是實際上輸出的是 false。如果我們輸出 sum 的話,我們會發現它的數值其實是 0.9999999999999999
這就是經典的「浮點數陷阱」,產生的主要原因是小數在計算機內部轉換成二進位制的時候可能位數過長,超過了指定精度,被計算機省略掉了。具體的介紹可以見這篇文章 只有1%的程式設計師搞懂過浮點數陷阱
在判斷兩個浮點數a和b是否相等時,不要用a==b
,應該判斷兩者之差的絕對值abs(a-b)
是否小於某個閾值,例如1e-9。
定點數與浮點數 小數
一 計算機中一共有兩種機器數型別 機器數就是計算機中參與運算的有符號二進位制數,其實,它與我們平時使用的十進位制一樣,有整數也有小數,但是關鍵在於,如果二進位制與我們平時書寫十進位制小數一樣,帶上乙個 那麼二進位制受困於儲存器中字長的限制,無法靈活地表示小數的小數點 所以,二進位制的小數在儲存器中的...
C語言計算浮點數的小數字數,遮蔽掉了浮點運算的誤差
問題是這樣的,輸入兩個浮點數,分別為矩形的width和length,求其面積area,並輸出顯示。本身這道題是沒什麼好說的,正常來說,只要 f 就好,雖然後面的小數字數恆定為6位。但是答題後發現答案是會自動把多餘的0去掉的,這樣的話就沒辦法使用 3f之類的來限定具體的小數字數了。於是這個就需要我們把...
計算機組成原理之定點數與浮點數
計算機中常用的資料表示形式 定點數 浮點數。定點數 小數點的位置固定不變 分為定點定點整數和定點小數 1 定點小數 純小數 小數點隱含固定在最高資料位的左邊,所以整數字就是最高位用來表示符號位 計算機中儲存為 1010111 第一位1為符號位,表示負數 實際含義 0.010111 2 定點整數 純整...