C プログラムでゼロ除算を行うと、エラー メッセージが表示されて異常終了しますFloating point exception (core dumped)
。これは浮動小数点除算では当然のことですが、ゼロによる整数除算が発生したときになぜこのようになるのでしょうか? 整数除算は実際に内部で FPU を使用しますか?
(ちなみに、これはすべて x86 の Linux 上にあります。)
C プログラムでゼロ除算を行うと、エラー メッセージが表示されて異常終了しますFloating point exception (core dumped)
。これは浮動小数点除算では当然のことですが、ゼロによる整数除算が発生したときになぜこのようになるのでしょうか? 整数除算は実際に内部で FPU を使用しますか?
(ちなみに、これはすべて x86 の Linux 上にあります。)
整数除算は実際に内部で FPU を使用しますか?
いいえ、Linux はこの場合も SIGFPE を生成するだけです (これは使用法が拡張された古い名前です)。実際、Single Unix 仕様では、SIGFPEを「誤った算術演算」と定義しています。
これについての歴史的な説明を推測すると、元の UNIX ハードウェアはゼロによる整数除算でトラップを生成しなかったため、この名前SIGFPE
は理にかなっています。(PDP アセンブリ プログラマー、確認しますか?) その後、システムがハードウェアに移植された (Linux の場合は再実装された) ときに、ゼロによる整数除算トラップを使用して、新しいシグナル番号を追加する価値はないと見なされたので、古いものは新しい意味を獲得し、少し紛らわしい名前になりました。