1. ホーム
  2. c++

[解決済み] C++ 警告: ゼロによるダブルの除算

2023-01-02 12:55:59

質問

ケース1です。

#include <iostream>

int main()
{
    double d = 15.50;
    std::cout<<(d/0.0)<<std::endl;
}

警告を出さずにコンパイルして inf . OK、C++はゼロによる除算を扱うことができます、( ライブを見る ).

しかし

ケース2

#include <iostream>

int main()
{
    double d = 15.50;
    std::cout<<(d/0)<<std::endl;
}

コンパイラは次のような警告を出します ( ライブを見る ):

warning: division by zero [-Wdiv-by-zero]
     std::cout<<(d/0)<<std::endl;

なぜコンパイラは2番目のケースで警告を出すのでしょうか?

0 != 0.0 ?

編集します。

#include <iostream>

int main()
{
    if(0 == 0.0)
        std::cout<<"Same"<<std::endl;
    else
        std::cout<<"Not same"<<std::endl;
}

を出力します。

Same

どのように解決するのですか?

浮動小数点の0による除算は でよく定義されています。 で定義されており、無限大(分子の値に応じて正または負)を与えます。 (または NaN 0 の場合) ).

整数の場合、無限大を表現する方法がなく、言語では演算に 未定義の動作 と定義しているので、コンパイラは親切にもその道から遠ざかろうとします。

しかしこの場合、分子は double であるため、除数( 0 ) も double に昇格されるべきで、ここで警告を与える理由はありません。 0.0 で警告が出ないのだから、これはコンパイラのバグだと思う。