我有一个double打印出来0.000000,我试图比较它0.0f,但没有成功.为什么这里有区别?什么是最可靠的方法来确定你的双倍是零?
假设我有两个浮点数,我想比较它们.如果一个大于另一个,程序应该采用一个分叉.如果情况恰恰相反,那么应采取另一条道路.并且它应该做同样的事情,如果被比较的值被轻微地推向一个方向,仍然应该比较真实.
这是一个难以解释的问题,所以我写这篇文章来证明它 -
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
}
Run Code Online (Sandbox Code Playgroud)
鉴于此代码,launchTheMissiles()保证永远不会被调用?