代码之家  ›  专栏  ›  技术社区  ›  Meraj al Maksud SebastianX

“inf”不能像c中的常规数值那样赋给变量++

  •  0
  • Meraj al Maksud SebastianX  · 技术社区  · 7 年前

    当我编写以下代码时,它输出“inf”,而不是导致运行时错误。现在,有没有办法将这个值(“inf”)赋给一个变量,比如普通的数值?如何检查一个除法是否产生'inf'?

    #include<iostream>    
    
    int main(){
        double a = 1, b = 0;
        std::cout << a / b << endl;
        return 0;
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Julius    7 年前

    C++不需要实现来支持无限或除以零。许多实现将使用IEEE 754格式,即使它们不完全支持ieee754语义。

    当你想用无穷大作为一个值时 (也就是说,您希望在源代码中引用无穷大),不应该通过除以零来生成它。相反,包括 <limits> 使用 std::numeric_limits<T>::infinity() 具有 T 指定为 double .

    返回由浮点类型T表示的特殊值“正无穷大”。仅当 std::numeric_limits< T >::has_infinity == true .

    (您还可以看到包含 <cmath> 和用途 INFINITY ,这是从C.)继承的

    当你想检查的时候 如果一个数是有限的,包括 <cmath> 使用 std::isfinite . 请注意,具有无限值的计算最终会产生 NaN s、 以及 std::isfinite(x) 通常比 !std::isinf(x) && !std::isnan(x) .

    最后一个警告,以防使用不安全的编译器标志 :如果您使用GCC -ffinite-math-only (包括在 -ffast-math )那么 std::isfinite does not work .

        2
  •  0
  •   Meraj al Maksud SebastianX    7 年前

    看来我可以:

    #include<iostream>
    
    int main(){
        double a = 1, b = 0, c = 1/0.0;
        std::cout << a / b << endl;
        if (a / b == c) std::cout << "Yes you can.\n";
    
        return 0;
    }
    
    推荐文章