【问题标题】:Can 'inf' be assigned to a variable like regular numeric values in c++可以将'inf'分配给像c ++中的常规数值一样的变量
【发布时间】:2018-08-07 07:55:07
【问题描述】:

当我编写以下代码时,它不会导致运行时错误,而是输出“inf”。现在,有没有办法将此值('inf')分配给变量,例如常规数值?如何检查除法是否产生'inf'?

#include<iostream>    

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

【问题讨论】:

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


【解决方案1】:

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

当你想使用无穷大作为值时(即你想在源代码中引用无穷大),你不应该通过除以零来生成它。相反,包括 &lt;limits&gt; 并使用 std::numeric_limits&lt;T&gt;::infinity() 并将 T 指定为 double

返回特殊值“正无穷大”,由浮点类型 T 表示。仅在 std::numeric_limits&lt; T &gt;::has_infinity== true 时才有意义。

(您可能还会看到包含&lt;cmath&gt; 并使用INFINITY 的代码,它们继承自C。)

当您想要检查一个数字是否为有限时,请包含 &lt;cmath&gt; 并使用 std::isfinite。请注意,具有无限值的计算往往最终会产生NaNs,而std::isfinite(x) 通常比!std::isinf(x) &amp;&amp; !std::isnan(x) 更方便。

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

【讨论】:

    【解决方案2】:

    看来我可以:

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

    【讨论】:

    • 为什么'inf'应该等于1?
    • 对不起,我的错。这是一个错字。
    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2017-07-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多