2011-07-24 8 views
1

いくつかの奇妙な理由で、私は次からNSDecimalNumberOverflowExceptionを受け取る:NSDecimalNumberのnotANumberのドキュメントを引数としてはNaNを受ける任意の算術演算は、NaNを返しますと述べているのでNSDecimalNumber:2つのNaNを合計するとオーバーフローが発生しますか?

NSDecimalNumber *a = [NSDecimalNumber notANumber]; 
NSDecimalNumber *b = [NSDecimalNumber notANumber]; 
NSLog(@"%@",[a decimalNumberByAdding:b]); 

これは私には予想外のようです...

は、私はありがたいことに1 + 1はまだ2

何が起こっている上の任意のアイデアを与える... 1 +はNaNとNaNの+ 1に同じエラーが発生しますか?

+1

*シグナリング* NaNとa * quiet * NaNを作成している可能性はありますか?これらの概念はIEEE-754に存在し、NSDecimalNumberについてはわかりません。 '[decimalNumberByAdding:x]'を実行するとどうなりますか? 'x'はNSDecimalNumberで作成された' 1.0/0'バイトですか? –

+0

ドキュメントの言い回しを考えれば、静かなNaNが作成されると思いますが、シグナリングNaNの考え方はここでより理にかなっています。 1.0/0については、除算例外が発生します。 NSDecimalNumberの算術が私のために行うことを期待するのではなく、明示的にこれらの例外を明示的に考慮する必要があるようです。 – Karl

+0

あなたのコメントを回答としてお伝えください。私はそれに印をつけます。 – Karl

答えて

1

は要求:

それは静か NaNの対はNaNを知らせるを作成していることだろうか?これらの概念はIEEE-754に存在し、NSDecimalNumberについてはわかりません。 [x decimalNumberByAdding: x]を実行するとどうなりますかxはNSDecimalNumberが作成したバイト1.0/0ですか?

1

なぜNaN値で算術演算を実行したいのですか? NaNはエラー値です。ポスターパー

+1

NaN値を使って算術演算を実行する動機は、そのポイントの横にあります。 – Karl

+0

'NaN'は必ずしもエラー値であるとは限りません。 IEEE-754は、「静か」と「シグナリング」の両方の形式を指定します。 'NaN'は、上記のようにハードコードされているのではなく、フォールスルーすると予想されるかもしれません。 –

関連する問題