2013-04-29 4 views
5

に関してとIEEE754における中立要素がありますはさらに

double id = ?; 
double res; 
long unsigned *res_u = (long unsigned*)&res; 

long unsigned i; 
for (i = 0; i < (long unsigned)-1; i++){ 
    double *d1 = (double*)&i; 
    res = id + *d1; 
    assert(*res_u == i); 
} 

次のコードスニペットを考えてみましょう私の質問は:アサーションはすべてi成り立つようidの値は、ありますか?言い換えれば、私たちの中の数学者のために:追加の中立要素である倍音はありますか?

+0

0または-0またはNANまたはInfinityまたは-Infinityに似ていますか? –

+0

@MichaelDorgan + inf +(-inf)はNaNを作るので、どちらも中立ではありません。 –

+0

ええ、あなたの答えは正しいです。私はちょうど質問を確認しようとしていた。あなたの-0答えはいいです。 –

答えて

7

-0.は逆説的に浮動小数点値であり、加算のために中立として機能します。

+0.ほぼですが、-0. + (+0.)+0.となります。それとは別に

+inf + (-0.)-inf + (-0.)-infなり、NaN + (-0.)NaNを行い、+infます。

+6

デフォルトの丸めを仮定します。丸めモードをround-to-minus-infinityに設定すると、 '+ 0.'は中立になります。 –

+0

正規化はどうですか?あなたは 'r = d +(-0)'をすると、何か変なことが起こることを期待していますか? – niklasfi

+0

@niklasfi:ゼロを追加すると正規化が行われません。 –

関連する問題