作者popular10347 (popular)
看板C_and_CPP
標題[問題] 浮點數比較問題
時間Fri Feb 19 20:58:46 2016
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
浮點數因為有誤差,因此在做比較時會讓兩數相減後取絕對值
例如:
float a=0.0;
while(a != 1.0)
a+=0.1;
這個例子會有無窮迴圈
所以需要改成如下:
float a=0.0;
while(abs(a-1.0)<=0.001)
a+=0.1;
這樣才不會無窮迴圈
但是,0.001是如何決定?
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.239.19
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1455886728.A.EDA.html
推 LPH66: 隨你, 夠小就好 02/19 21:15
推 LPH66: 樓上這個差距大概多算個幾次就不成立了吧 02/19 21:52
→ LPH66: 那個值是 1 跟比 1 大的最小浮點數之間的差 02/19 21:53
→ LPH66: 所以當多次運算誤差變大後就不會滿足了 02/19 21:54
→ LPH66: 基本上這種東西取多少真的要看需求, 有的 0.001 就夠 02/19 21:54
→ LPH66: 有的可能會到 1e-5 或 1e-8 甚至 1e-10 都有可能 02/19 21:55
推 LiloHuang: 樓上說的沒錯,忘了說重點是在於網頁裡面的範例 02/19 21:58
→ LiloHuang: Google C++ Test 裡面的 AlmostEquals 我記得更加完善 02/19 22:01
→ Killercat: 有比較簡單的方法,放大10^n以後硬轉int 02/20 21:06
→ Killercat: n要多少自己決定 02/20 21:06