2009-07-04 1 views
22

今日、私はちょうど書いたコードで浮動小数点例外を追跡していました。実際には整数のゼロを取ることによって発生したため、少し時間がかかりました。明らかに何かmodゼロを行うことは定義されませんが、私はそれが間違っていたのは奇妙だと思いました。 2つの整数の浮動小数点を使用するC++のモジュロ演算子の中身は何ですか? (私はgcc 4.3.2を使用しています)bが0のときに%bがSIGFPEを生成するのはなぜですか?

ここに、エラーを示す簡単なプログラムがあります。

int main() 
{ 
    int a=3,b=0; 
    int c=a%b; 
    return 0; 
} 

答えて

33

動作SIGFPEをトリガ:

SIG信号 名の共通のプレフィックスです。 FPEは 浮動小数点例外の略語です。 SIGFPEには必ずしも 浮動小数点演算が含まれていませんが、 の下位互換性を失うことなく、その名前を変更する方法はありません( )。

GDBは、このことについて少し明確であり、 "算術例外" と呼んでいます:

(gdb) run 
Starting program: /home/emil/float 

Program received signal SIGFPE, Arithmetic exception. 
0x0804837d in main() at float.c:4 
4   int c=a%b; 
9

this pageをご覧ください。あなたの質問のための

関連部分:

SIGは、信号名に共通のプレフィックスです。 FPEは、浮動小数点例外の略語です。 SIGFPEは浮動小数点演算を必ずしも必要としませんが、下位互換性を損なうことなくその名前を変更する方法はありません。

関連する問題