加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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非无穷大值的比较.所以,在这个具体情况下,你可以将这些数字看成是“更好的整数”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读