[问题] 浮点数比较问题

楼主: popular10347 (popular)   2016-02-19 20:58:46
开发平台(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):
作者: Killercat (杀人猫™)   2016-02-20 21:06:00
有比较简单的方法,放大10^n以后硬转intn要多少自己决定
作者: LPH66 (-6.2598534e+18f)   2016-02-19 21:15:00
随你, 够小就好
作者: LiloHuang (十年一刻)   2016-02-19 21:25:00
std::numeric_limits::epsilon() http://goo.gl/Rgqyy3
作者: LPH66 (-6.2598534e+18f)   2016-02-19 21:52:00
楼上这个差距大概多算个几次就不成立了吧那个值是 1 跟比 1 大的最小浮点数之间的差所以当多次运算误差变大后就不会满足了基本上这种东西取多少真的要看需求, 有的 0.001 就够有的可能会到 1e-5 或 1e-8 甚至 1e-10 都有可能
作者: LiloHuang (十年一刻)   2016-02-19 21:58:00
楼上说的没错,忘了说重点是在于网页里面的范例Google C++ Test 里面的 AlmostEquals 我记得更加完善

Links booklink

Contact Us: admin [ a t ] ucptt.com