[解決済み] 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
で警告が出ないのだから、これはコンパイラのバグだと思う。
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] 通貨を表すのにDoubleやFloatを使ってはいけないのですか?
-
[解決済み] 除算を強制的に浮動小数点にするにはどうしたらいいですか?除算は0に切り捨てられ続けますか?
-
[解決済み] C#でDecimalをDoubleに変換する方法は?
-
[解決済み] floatとdoubleの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み] 未定義、未指定、および実装で定義された動作