看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
LiloHuang: std::numeric_limits::epsilon() http://goo.gl/Rgqyy3 02/19 21:25
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