PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 浮点数比较问题
楼主:
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 我记得更加完善
继续阅读
Re: [问题] printf & 型态转换
drag
[问题]学习unique_ptr遇到的compile error
shaopin
[问题] SDL2 RenderPresent 的叙述看不太懂
ResolaQQ
[问题] 关于用win32 API 开启档案
jyhchyunlu
[问题] intersect Ray box and Triangle
bjk
[问题] 能强化c/c++演算或逻辑的书..
mistborn82
[问题关于建构式的小问题
a2318aa
[问题] 蚂蚁书 C++ How to Program版本
ununnihao
[问题] array initialize macro
james732
[分享] Boost build 心得
Caesar08
Links
booklink
Contact Us: admin [ a t ] ucptt.com