0

これは特殊なケースであり、+NaNが0x7F800001から0x7FFFFFFFになることをどこかで見ました。答えは+NaNですか?

4

2 に答える 2

2

7FFFFFFFIEEE754 32ビット浮動小数点として解釈する場合は、はい、 7FFFFFFFNaNです。これらのことは、単精度浮動小数点形式のWikipediaページを見ると理解できます。この小さなCプログラムを作成して、要点を説明しました。

#include <stdio.h>

int main(){

  unsigned u0 = 0x7FFFFFFF;
  unsigned u1 = 0x7F800001;
  unsigned u2 = 0x7F800000;
  unsigned u3 = 0x7F7FFFFF;

  // *(float*)&u0 causes the data stored in u0 to be interpreted as a float
  printf("%e\n", *(float*)&u0);  // This gives nan
  printf("%e\n", *(float*)&u1);  // This also gives nan
  printf("%e\n", *(float*)&u2);  // This gives inf
  printf("%e\n", *(float*)&u3);  // This gives 3.402823e+38, the largest possible IEEE754 32-bit float

  // The above code only works because sizeof(unsigned)==sizeof(float)
  printf("%u\t%u\n", sizeof(unsigned), sizeof(float));

  // Remember that nan is only for floats, u0 is a perfectly valid unsigned.
  printf("%u\n", u0);            // This gives 2147483647

}

繰り返しになりますが、NaNは浮動小数点数としてのみ存在することに注意する必要があります。

于 2012-10-01T20:18:15.003 に答える
0

+NaN は、浮動小数点数の特別な値です (10 進数に相当するものはありません。「非数」です)。16 進表現として 7FFFFFFFF を持つ整数の 10 進表現だけが必要な場合は、浮動小数点は含まれず、+NaN もありません。

于 2012-10-01T19:55:38.260 に答える