c – 浮点,我可以信任多少比/比较比较多?

前端之家收集整理的这篇文章主要介绍了c – 浮点,我可以信任多少比/比较比较多?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个浮点数,我想比较它们.如果一个大于另一个,程序应该采取一个叉.如果是相反的话,应该采取另一条路.它应该做同样的事情,如果正在比较的价值被微调,方向应该仍然使它比较真实.

这是一个困难的问题,所以我写这个来证明它 –

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

原文链接:https://www.f2er.com/c/113920.html

猜你在找的C&C++相关文章