Re: [問題]一題C++的問題
看板C_and_CPP (C/C++)作者cismjmgoshr (--???--)時間16年前 (2009/04/11 00:52)推噓1(1推 0噓 0→)留言1則, 1人參與討論串2/2 (看更多)
※ 引述《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
推
04/12 00:17, , 1F
04/12 00:17, 1F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章