C++NaN

2522 ワード

オリジナルじゃない
原文の住所:
http://blog.163.com/chen_dawn/blog/static/11250632025494852135/
1,NaNはNot a Numで、浮動小数点に対してのみ出現します.この浮動小数点の第一位以外のビットが全部1の場合、この浮動小数点はNaNとなります.例えば、メモリが0 xFFFFFFFFFFを表すdouble型の数はNaNである.2つの範囲外の浮動小数点(つまりINF)を演算すると、演算結果はNaNになります.
2,NaNエラー
NaNはNot a Numberの略語です.  
NaNは、0.0で割ったり、負の数を求める平方根など、計算に発生するエラーを処理するために使用されます.上記の表からわかるように、シングル精度浮動小数点数に対して、NaNは指数emax+1=128(指数域は全部1)であり、端数領域はゼロの浮動小数点に等しくない.IEEE規格は具体的な端数ドメインを要求していないので、NaNは実は一つではなく、一族です.異なる実装は、Java中の定数Float.NaNの浮動小数点が011111100000000000 000 000と表現されるように、端数ドメインの値を自由に選択してNaNを表現することができるが、この点は、システムのハードウェアアーキテクチャに依存する.Javaでは、プログラマ自身が特定のビットパターンを持つNaN値を構築することも可能である(Float.intBits ToFloat(方法).例えば、プログラマは、このカスタマイズされたNaN値の中の特定のビットパターンを利用して、いくつかの診断情報を表現することができる.
3,vc 6で一つの浮動小数点数がNAN(INF)かどうかを判断します.
NANとはnot a numberのことです.
浮動小数点はゼロカット操作を行うと、NAN(INF)になります.
以下の関数を使用して、この値がNAN(INF)かどうかを判断することができる.
ライブラリ関数:int isnan(double); 
int_finite(double)//vcではこの関数を使用します.
//入力されたdouble値が無効であれば、関数は0に戻ります. ライブラリファイルを含める必要があります.
ユーザー定義の関数を書いて判断することもできます.
1 bool is_nan(double dVal)
2 {
3   if (dVal==dVal)
4     return false;
5
6   return true;
7 }

4.The include fileisnan()—Test for NaNROOTはInt_です.t TMath::IsNaN=Doubleyix===========================================================================================================================================================isnan()関数の応用 
 
Native C++とは?
double型の数値が数字ではないという意味で.netではこう表現できます.
double d = double.NaN;
double.NaNの原型は以下の通りです.
//
// Summary:
// Represents a value that is not a number (NaN). This field is constant.
public const double NaN = 0.0 / 0.0;
Native C++では、数字ではないdoubleを表すには、次の関数が使えます.
double GenerateNaN()
{
unsigned long nan[2]={0xffffffff, 0x7fffffff}; // code representing a NaN
return *( double* )nan;
}
doubleタイプはNaNかどうかを判断し、使用できます.  _isnan()関数:
double d = GenerateNaN();
if(_isnan(d))
{
printf("d is NaN.");
}
転載先:https://www.cnblogs.com/anHIZ/archive/2013/02/03/2890597.html