c – 浮点,我可以信任多少比/比较比较多?
发布时间:2020-12-16 05:42:33 所属栏目:百科 来源:网络整理
导读:假设我有两个浮点数,我想比较它们.如果一个大于另一个,程序应该采取一个叉.如果是相反的话,应该采取另一条路.它应该做同样的事情,如果正在比较的价值被微调,方向应该仍然使它比较真实. 这是一个困难的问题,所以我写这个来证明它 – float a = random();float
假设我有两个浮点数,我想比较它们.如果一个大于另一个,程序应该采取一个叉.如果是相反的话,应该采取另一条路.它应该做同样的事情,如果正在比较的价值被微调,方向应该仍然使它比较真实.
这是一个困难的问题,所以我写这个来证明它 – float a = random(); float b = random(); // always returns a number (no infinity or NaNs) if(a < b){ if( !(a < b + FLOAT_EPISILON) ) launchTheMissiles(); buildHospitals(); }else if(a >= b){ if( !(a >= b - FLOAT_EPISILON) ) launchTheMissiles(); buildOrphanages(); }else{ launchTheMissiles(); // This should never be called,in any branch } 给出这个代码,是否启动TheMissiles()保证永远不会被调用? 解决方法
如果可以保证a和b不是NaN或无限的,那么你可以做:
if (a<b) { … } else { … } 除了无穷大和NaN之外,所有浮点值的集合包括总排序(具有两个表示为零的毛刺,但对您而言无关紧要),这与使用正常的整数集不同 – 唯一的差异是后续值之间的间隔的大小不是恒定的,就像整数一样. 事实上,IEEE 754的设计使得可以用与正常整数相同的操作(再次,具有零的毛刺)来进行相同符号的非NaN非无穷大值的比较.所以,在这个具体情况下,你可以将这些数字看成是“更好的整数”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |