ホームページ >バックエンド開発 >C++ >C でゼロ除算エラーを適切に処理する方法

C でゼロ除算エラーを適切に処理する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 20:29:11939ブラウズ

How to Properly Handle Divide-by-Zero Errors in C  ?

ゼロ除算例外のキャッチ

C でゼロ除算を試みた場合、コンパイラまたはランタイムが自動的に例外をスローするわけではありません。 。動作は未定義です。つまり、例外やその他の予期しない結果が発生する可能性があります。

提供されたコード スニペット内:

int i = 0;

cin >> i;

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}

コードは、分割しようとするときに例外をキャッチしません。標準 C では整数のゼロ除算は例外とみなされないため、ゼロによる除算が行われます。

これを処理するには、ゼロによる除算条件を手動でチェックする必要があります。それに応じて例外をスローします。 C 標準ではゼロ除算の例外を明示的に定義していないため、次のような例外をスローすることを選択できます。

  • std::overflow_error: オーバーフローは次の場合に発生する可能性があるためです。 IEEE754 浮動小数点は除算の無限大を生成しますzero.
  • std::domain_error: 入力値 (つまり、分母がゼロ) に問題があることを示します。

これは、変更されたコード スニペットです。ゼロ除算例外のスローを示します:

int intDivEx(int numerator, int denominator) {
    if (denominator == 0)
        throw std::overflow_error("Divide by zero exception");
    return numerator / denominator;
}

try {
    i = intDivEx(5, 0);  // Will throw an overflow_error exception
} catch (std::overflow_error &amp;e) {
    cerr << e.what() << endl;
}

この例では、 intDivEx 関数はゼロ除算をチェックし、発生した場合は std::overflow_error 例外をスローします。これにより、コード内で例外を処理できるようになります。

以上がC でゼロ除算エラーを適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。