可以将'inf'分配给像c ++中的常规数值这样的变量

时间:2018-08-07 07:55:07

标签: floating-point double c++14 divide-by-zero

当我在C++14中编写以下代码(不了解其他版本)时,它不会输出运行时错误,而是输出'inf'。现在,是否有任何方法可以将此值('inf')分配给变量,例如常规数值?如何检查除法是否产生“ inf”?

#include<iostream>    

int main(){
    double a = 1, b = 0;
    std::cout << a / b << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

C ++不需要支持无穷大或除以零的实现。许多实现都将使用,因为许多实现即使不完全支持IEEE 754语义也使用IEEE 754格式。

当您想使用无穷大作为一个值(也就是说,您要在源代码中引用无穷大)时,请勿通过除以零来生成它。相反,请包含<limits>并在指定T的{​​{1}}中使用std::numeric_limits<T>::infinity()

  

返回特殊值“正无穷大”,以浮点类型T表示。仅在std::numeric_limits< T >::has_infinity double时有意义。

(您可能还会看到包含== true并使用INFINITY的代码,它们是从C继承的。)

要检查数字是否有限,请包括<cmath>并使用std::isfinite。请注意,具有无穷大值的计算往往最终会产生<cmath>,而NaN通常比std::isfinite(x)更方便。

使用不安全的编译器标志时的最终警告:例如,使用GCC的-ffinite-math-only(包含在-ffast-math中),然后使用std::isfinite does not work

答案 1 :(得分:0)

似乎可以:

#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;
}