浮點數運算的陷阱

2021-08-30 14:11:32 字數 732 閱讀 9368

浮點數的運算不能說是精確的,因為某些數字不能準確表示為二進位制(例如: 0.1),以下是乙個用浮點數運算的例子,例子證明了我們應該慎用浮點數運算。

/*** @author crane.ding

*/public class test

}

執行結果如下:

0.70000005 : false

0.7000000238418579 : false

0.7000000014901161 : false

0.7 : true

float

0.00.1

0.20.3

0.40.5

0.60.70000005

0.8000001

0.9000001

double

0.00.1

0.20.30000000000000004

0.40.5

0.60.7

0.7999999999999999

0.8999999999999999

0.9999999999999999

從以上的執行結果我們不難看出,浮點數的運算是有誤差的,例如0.2加0.1就不等於0.3;對於金額的執行如果採用浮點數,那計算出來的金額就不一定是準確的;這也是許多程式開發人員經常接觸,而未考慮到的乙個小陷阱。

浮點數陷阱

剛在 演算法競賽 入門經典 中看到的,乙個浮點數陷阱,覺得蠻有意思的,所以發上來和大家分享一下。下面 執行的結果是什麼?includeint main 或許你會覺得輸出肯定是從0.0開始一直到10.0結束對吧。不過你上機執行一下就會發現,輸出陷入了死迴圈一樣,會一直不停的輸出。原因是,程式中的i永遠...

浮點數陷阱

在書上看到這樣的乙個程式 includeint main return 0 第一反應是乙個簡單的for迴圈,i每次增加0.1如何輸出,一直到i 10,迴圈結束。執行之後 程式進入死迴圈,說明 for i 0 i 10 i 0.1 中i 10終止條件沒有起作用,在for迴圈中加入兩條語句觀察i的值 f...

浮點數陷阱

陷阱1 cpp view plain copy print double i for i 0 i 10 i 0.1 printf 1lf n i double i for i 0 i 10 i 0.1 printf 1lf n i 程式會列印至10.0時結束迴圈嗎?不會。因為i永遠也不可能等於10,...