3

コードのいくつかで値に出くわし、nanそれを処理する方法を知っていますが、 nan が何を意味するのかを正確に説明しようとすると、自分でもよくわからないことに気付きました。いくつかの明確化が必要なものには、同様の奇妙な値もいくつかあります。

infこれは明らかに無限大を意味しますが、float の最大値に達したときに表示されますか?

nanこれは正確には何を意味し、この値はいつ表示されますか?

nil私はこれを知っていると思います。割り当てられていないオブジェクトのインスタンス。とにかくこのリストに属していると思いました。

nullこれについてはよくわかりませんが、nilに似ていると思いますか?

4

2 に答える 2

12

infこれは明らかに無限大を意味しますが、float の最大値に達したときに表示されますか?

これは実際には ObjC の一部ではありませんが、無限値を保持するときにNSNumberこれを使用します。-description

an 内の実際の値NSNumberは adoubleであり、これは C で定義されています。実際、その定義はプラットフォームに大きく依存しています。ただし、ほとんどのプラットフォームでは、IEEE-754 binary64. IEEE 754 標準では、正と負の無限大と有限値の値を持つ、アフィン拡張された実数直線が定義されています。また、有限計算が無限にオーバーフローするさまざまな方法と、コードでそれを制御する方法を正確に定義します。しかし、原則として、そうです。計算が a の最大有限値を超えると、double正の無限大になります。

nanこれは正確には何を意味し、この値はいつ表示されますか?

これも主に C と IEEE-754 に関するものであり、ObjC に関するものではありません (繰り返しますが、 の を除く-description) NSNumber。ウィキペディアには に関する良いページがありますNaNが、簡単に言えば「非数」を意味し、 のように、適切な値がなく、無限でさえない場合 (またはあまりにも多くの異なる値があいまいな場合) に使用されます0/0

nil私はこれを知っていると思います。割り当てられていないオブジェクトのインスタンス。とにかくこのリストに属していると思いました。

nilオブジェクトのインスタンスではありません。指すインスタンスがない場合にnil使用される空のポインタです。基本的にorと同等です。(id)0(NSObject *)0

でも「割り振られていないオブジェクト」はオブジェクトじゃないし、存在しないから……そもそもそういう話に意味があるという意味でnilは、ポインターとでも言うべきか。それに。

nullこれについてはよくわかりませんが、似ていると思いますnilか?

+[NSNull null]値は、実際には存在するが何も表さないプレースホルダー オブジェクトとして使用されますNSArray

nullまた、空のポインタを C 文字列 (たとえば ) として出力しようとすると表示される場合がありますNSLog(@"%s", 0)。しかし、これが表示されるコードは、実際には正当な C または ObjC コードではありません。

また、空のポインタを意味する と混同されることがよくnullあります。NULL

したがって、idNSObject *NSSomeOtherClass *などがあり、それが指すものが何もない場合は、 を使用しますnil。のような ObjC 以外の値へのポインターがあり、int *それが指すものが何もない場合は、 を使用しますNULL。空のポインタをコレクションに入れたい場合は、 を使用しますnull

于 2013-06-02T07:09:27.687 に答える
2

NaN は「非数」を意味します。

適切な結果となる数値がない場合、浮動小数点演算は NaN を生成します。sqrt(–1)たとえば、 -1 の平方根の適切な近似となる、返される可能性のある浮動小数点数はありません。

NaN はさまざまな用途に使用できます。ソフトウェアは、浮動小数点オブジェクトをシグナリング NaN に初期化して、最初に値を割り当てずに使用するとトラップが発生するようにすることができます。

静かな NaN は黙って無視して、大規模な計算を完了することができます。NaN は後で修正または削除できます。(ほとんどの演算は NaN を伝播します。NaN と数値を加算すると、結果は NaN になります。)

于 2013-06-02T04:13:58.400 に答える