推 asdofe:這個簽名檔好傳神啊! 04/12 00:17
※ 引述《billbing (No.One)》之銘言:
: 小弟在做 C++ How to program 習題時,
: 看到一題找錯的題目如下:
: for(y=0.1; y!=1.0; y+=0.1){
: cout<<y<<endl;
: }
: 表面看起來好像沒錯,所以就用Dev C++跑程式
: 發現此for迴圈,會跳入無窮迴圈,
: 試了好久,還是沒辦法理解,於是請教版上的高手,
: 能幫我解答這個基本的問題,謝謝。
原因出在浮點數的精確度問題
電腦都是用二進位方式來儲存數字
____
0.1轉成二進位會變成 0.00011 ,後四位循環
但是電腦裡只能存放有限位數的數值(以double為例,可以存放52+1位的二進位數字)
( 詳細格式可以參考IEEE-754: http://zh.wikipedia.org/wiki/IEEE_754 )
因為0.1這個值無法被準確表示,所以累加10次之後的值很可能不是1.0
所以在比較兩個浮點數的數值時,很少會使用 == 或 != 這兩種條件
--
∫work dt = success
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.188.11