Re: [問題]一題C++的問題

看板C_and_CPP (C/C++)作者 (--???--)時間16年前 (2009/04/11 00:52), 編輯推噓1(100)
留言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
文章代碼(AID): #19ttbhVG (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #19ttbhVG (C_and_CPP)