これはウィキペディアSIGFPE ページの2番目の例です。なぜこの浮動小数点例外が生成されますか?
#include <limits.h>
int main(void)
{
volatile int x=INT_MIN;
volatile int y=-1;
x=x/y;
return 0;
}
INT_MINの正の符号を反転しています。どのようにFPEになりますか?
これはウィキペディアSIGFPE ページの2番目の例です。なぜこの浮動小数点例外が生成されますか?
#include <limits.h>
int main(void)
{
volatile int x=INT_MIN;
volatile int y=-1;
x=x/y;
return 0;
}
INT_MINの正の符号を反転しています。どのようにFPEになりますか?
Wikipediaの記事の答え:-)それらを使用しない:正の数、商ので、信号をトリガ
...、 表現ではありません。
INT_MIN/-1 = -INT_MIN
= INT_MAX + 1
=> invalid number
=> floating point exception (FPE)
あなたはwikiページを読んでいますか?おそらくFPEですが、浮動小数点例外ではありません。
SIGFPEは必ずしも浮動小数点 算術演算を必要としないものの、 後方互換性を壊すことなく、その名前を変更する方法はありません。
このページにリンクすると、「SIGFPEは浮動小数点演算を必ずしも必要としませんが、下位互換性を損なうことなく名前を変更する方法はありません。
信号が得られる理由は、2の補数が働くためです。 16ビットの2の補数(例えば)の範囲は、-32768..32767
である。
つまり、65,536の可能な値がその範囲にマップされます。 INT_MIN
を無効にしようとすると、正しい値を示す表現がありません(32768
は利用できません)。
Thはすべての2の補数の場合です.8ビットは-128..127
、32ビットは-2147483648..2147483647
となります。
これらのすべてのケースでは、INT_MIN
には正の同等品がありません。
興味深いことに、ISO C(1の補数と符号/大きさ)で許される他の2つのコード体系は、正の値と負の値の間に直接的な1対1のマッピングを持っています。同様に興味深い、ほとんど-1は