別のディスカッションでは、ユーザーは整数のゼロ除算にもかかわらず、C コードで「浮動小数点エラー」に遭遇しました。実際の問題です。これにより、整数のゼロ除算演算から浮動小数点例外が発生する可能性があるかどうかについての議論が生まれました。
伝統的に、整数のゼロ除算は整数例外を生成すると考えられてきました (IA-32 および #DE では)。 AMD64)、浮動小数点のゼロ除算は浮動小数点例外 (割り込み 16 または 19) をトリガーします。ただし、一部のプラットフォームはこの規則から逸脱しています。
POSIX 標準によれば、整数オペランドのゼロ除算演算は、次のことを示す SIGFPE 信号を生成する必要があります。浮動小数点例外。これは、POSIX システムでは、ゼロによる整数の除算が浮動小数点例外として報告されることを意味します。
GNU C ライブラリ (glibc) を使用する多くの Linux システムでは、 SIGFPE は、siginfo_t オブジェクトの si_code フィールドを通じて追加情報を提供します。整数のゼロ除算の場合、このフィールドの値は FPE_INTDIV_TRAP になります。
Windows が整数のゼロ除算の例外をどのように処理するかに関する情報は、すぐには入手できません。 Windows では、Unix と同様に、別個の例外タイプを使用したり、さまざまな算術例外を単一のカテゴリにパッケージ化したりする可能性があります。
整数算術とは対照的に、IEEE754浮動小数点標準はゼロ除算の特定の動作を定義します演算:
ほとんどのオペレーティング システムと C ABI では、浮動小数点例外はユーザー空間プロセスに対してデフォルトでマスクされます。これにより、トラップを発生させることなく、計算を通じてエラー値 (NaN および Inf) を伝播することができます。
「スティッキー」整数オーバーフロー フラグについては、次のことが提案されています。計算シーケンス中にレコードがオーバーフローする。ただし、整数オーバーフローの検出方法はアーキテクチャによって異なります。x86 では各計算後に条件付き分岐が必要であり、MIPS では符号付きオーバーフローをトラップするための特定の命令が提供されます。
整数除算の動作ゼロと浮動小数点例外の処理はプラットフォームによって異なります。一部のシステム (POSIX システムなど) は整数のゼロ除算を浮動小数点例外として扱いますが、他のシステムでは区別する場合があります。このような問題をデバッグするときは、ターゲット プラットフォーム上の特定のエラー報告メカニズムを認識することが重要です。
以上がゼロによる整数除算は浮動小数点例外をトリガーできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。