作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1455886728.A.EDA.html
1F:推 LPH66: 随你, 够小就好 02/19 21:15
3F:推 LPH66: 楼上这个差距大概多算个几次就不成立了吧 02/19 21:52
4F:→ LPH66: 那个值是 1 跟比 1 大的最小浮点数之间的差 02/19 21:53
5F:→ LPH66: 所以当多次运算误差变大後就不会满足了 02/19 21:54
6F:→ LPH66: 基本上这种东西取多少真的要看需求, 有的 0.001 就够 02/19 21:54
7F:→ LPH66: 有的可能会到 1e-5 或 1e-8 甚至 1e-10 都有可能 02/19 21:55
8F:推 LiloHuang: 楼上说的没错,忘了说重点是在於网页里面的范例 02/19 21:58
9F:→ LiloHuang: Google C++ Test 里面的 AlmostEquals 我记得更加完善 02/19 22:01
10F:→ Killercat: 有比较简单的方法,放大10^n以後硬转int 02/20 21:06
11F:→ Killercat: n要多少自己决定 02/20 21:06