2016-10-01 4 views
-4

a(float)#NAN( "Not A Number")は0x7F A0 00 00の値が普遍的に割り当てられていますか、普遍限り山車が懸念しているようなものを受け入れる方向で起こって何がある場合、それは関連するIEEE標準になりa(float)に普遍的に受け入れられる値はありますかN

+8

言語、コンパイラなどに依存します。将来的にはJava、C、C++の3つの言語が異なるため、タグを付けないでください。 – CoryKramer

+0

javaまたはcまたはC++?私はそれが同じだとは思わない。 –

+2

[こちらの記事](https://en.wikipedia.org/wiki/NaN):*「静かなNaNとシグナリングNaNと呼ばれる2種類のNaNが提供されています」* – user3386109

答えて

5

号、それでもこの規格はバリエーションが可能になります:

https://en.wikipedia.org/wiki/NaN

+0

Mikesのリンクから: "たとえば、ビット単位のIEEE浮動小数点標準単精度(32ビット)のNaNは次のようになります。s111 1111 1xxx xxxx xxxx xxxx xxxx xxxx"したがって、通信でNANを検出する際に最も有効な回避策は、 0x7Fである最初のバイトを探し、他の3バイトは無視してください。 – Harvard

+0

Java 1.8.0_102(NetBeans IDE 8.1)が世界をどのように見えるかは次のとおりです。
0x7F 00 00 00は "float値は170141183460469230000000000000000000000.000000"です。
0x7F 80 00 00は "float値は無限大"を返します。
0x7F A0 00 00は "浮動小数点数がNaN"を返す – Harvard

+0

@HarvardとJavaはIEEE 754のサブセットを使用しています。 (保証されていない可能性は高いですが) –

1

IEEE 754(「IEEE浮動小数点」)は、最大指数値と有効数字の非ゼロビットをNANとするすべての表現を定義します。したがって、単精度のための有効なテストは、次のようになります。

Cで
uint32_t repr; 
memcpy(&repr, &f, sizeof repr); 
if ((repr & 0x7fffffff) > 0x7f800000) //... 

、あなたが私たちのように、実際に多くの、2.0+2.0==5.0が可能であり、IEEE算術演算を想定していない場合を行う、それを前提としています。オプションのAnnex Fで指定されています。

関連する問題