PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 浮点数是否适合比较大小
楼主:
xxxx9659
(嘎嘎嘎嘎嘎)
2014-08-12 18:05:06
浮点数作等于运算适合吗??
double d1, d2;
d1 = 0.0;
d2 = 0.0;
if(d1 == d2) printf("OK!\n");
d1 += d2;
d1 -= d2 * 123.45;
d1 *= d2 * 543.21;
if(d1 == d2) printf("OK!\n");
就上面的程式来看
真的会如我们所想的这样,两个 if 都成立??
这样做是否有风险?? (不同的编译环境 or 运算误差之类的)
还是这程式 100% 一定不可能有错??
作者:
bibo9901
(function(){})()
2014-08-12 18:16:00
不适合, 最好用 abs(d1 - d2) < 某个误差值 来表示相等
作者:
iamstudent
(stu)
2014-08-12 19:20:00
这是数值精准度问题,你要实验的话,两个数字不要0
作者:
diabloevagto
(wi)
2014-08-12 19:57:00
置顶文第11戒
作者: LiloHuang (十年一刻)
2014-08-12 23:00:00
这篇文章个人认为值得一看 :D
http://goo.gl/bpeuR0
除了最常见的误差值比较方式,还有一些具技巧性的比较
作者:
lNishan
(紫小霓)
2014-08-13 02:10:00
推楼上分享 :) 已bookmark 有空看
作者:
Killercat
(杀人猫™)
2014-08-13 06:32:00
如果要有==需求的话 打从一开始就不该用float这就跟java的String ==一样 根本不是字面上的“相等”意思 而是指“bitwise equal”(java string则是指reference equal)
作者:
QQ29
(我爱阿蓉)
2014-08-13 09:10:00
像是c# java 的compare function用来比浮点数 有风险吗
作者:
Killercat
(杀人猫™)
2014-08-13 09:25:00
浮点计算根本就不该== 任何语言都一样...因为所有语言的浮点都是走IEEE754 可以参考一下spec他是spec面上就不该==了 跟语言实作没有关系但是他允许有限精确度的compare(大于小于)就是不过compare要注意最小精确度的问题
继续阅读
[问题] DataGridView绑定sqlite
Elfiend
[问题] boost中的remove_edge和vector合并使用
sea010461
Re: [问题] linked list 循环改递回
solinari
[问题] 隐藏字符问题
kenn2001
[问题] 关于结构传递问题
sorryandbye
[问题] fstream close() 耗时?
catspawboy
[问题] linked list 循环改递回
solinari
[问题] while的判断式里面有阵列无法跑
bjiyxo
[问题] Visual Studio 2010 无法正常运作
o07608
[讨论] cin 跟 cin.getline 问题
longted3
Links
booklink
Contact Us: admin [ a t ] ucptt.com