当我编写以下代码时,它没有导致运行时错误,而是输出'inf'。现在,有没有办法把这个值("f"(分配给一个变量,就像常规数值一样?如何检查除法是否产生"inf"?
#include<iostream>
int main(){
double a = 1, b = 0;
std::cout << a / b << endl;
return 0;
}
C++不需要实现支持无穷大或除以零。许多实现方式将使用IEEE 754格式,即使它们不完全支持IEEE 754语义。
当您想要使用无穷大作为值时(也就是说,您想要在源代码中引用无穷大(,您不应该通过除以零来生成它。相反,包括<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
不起作用。
看起来我可以:
#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;
}