我知道,为了比较两个浮点值,需要使用一些epsilon精度,因为它们并不精确.但是,我想知道是否有边缘情况,我不需要那个epsilon.
特别是,我想知道做这样的事情总是安全的:
double foo(double x){
if (x < 0.0) return 0.0;
else return somethingelse(x); // somethingelse(x) != 0.0
}
int main(){
int x = -3.0;
if (foo(x) == 0.0) {
std::cout << "^- is this comparison ok?" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道有更好的方法可以编写foo(例如,另外返回一个标志),但我想知道一般情况下是否可以分配0.0给浮点变量然后将其与之比较0.0.
或者更一般,以下比较是否总是如此?
double x = 3.3;
double y = 3.3;
if (x == y) { std::cout << "is an epsilon required here?" << std::endl; }
Run Code Online (Sandbox Code Playgroud)
当我尝试它时,似乎工作,但可能是一个人不应该依赖它.