浮點數陷阱

2021-08-15 02:34:40 字數 628 閱讀 3044

在書上看到這樣的乙個程式:

#includeint main()

return 0;

}

第一反應是乙個簡單的for迴圈,i每次增加0.1如何輸出,一直到i=10,迴圈結束。

執行之後:

程式進入死迴圈,說明

for(i=0;i!=10;i+=0.1)
中i!=10終止條件沒有起作用,在for迴圈中加入兩條語句觀察i的值:

for(i=0;i!=10;i+=0.1)
執行結果:

for迴圈只執行一次,可見雖然輸出的i值保留小數點後一位,但是i不等於0.1,這也是i!=10終止條件沒有起作用的原因。修改為

for(i=0;i!=10.000000;i+=0.1)
執行結果依然是死迴圈,沒有想明白為什麼。贏注意避開用這種浮點數的for迴圈。

浮點數陷阱

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

浮點數陷阱

陷阱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,...

浮點數運算的陷阱

浮點數的運算不能說是精確的,因為某些數字不能準確表示為二進位制 例如 0.1 以下是乙個用浮點數運算的例子,例子證明了我們應該慎用浮點數運算。author crane.ding public class test 執行結果如下 0.70000005 false 0.7000000238418579 ...