当我在C++14
中编写以下代码(不了解其他版本)时,它不会输出运行时错误,而是输出'inf'。现在,是否有任何方法可以将此值('inf')分配给变量,例如常规数值?如何检查除法是否产生“ inf”?
#include<iostream>
int main(){
double a = 1, b = 0;
std::cout << a / b << endl;
return 0;
}
答案 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;
}