相关疑难解决方法(0)

没有epsilon可以将浮点数与0.0进行比较吗?

我知道,为了比较两个浮点值,需要使用一些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)

当我尝试它时,似乎工作,但可能是一个人不应该依赖它.

c++ floating-point equality

15
推荐指数
2
解决办法
4508
查看次数

标签 统计

c++ ×1

equality ×1

floating-point ×1