web-dev-qa-db-ja.com

NaN番号を確認してください

数値がNaNかどうかを確認することはできますか?

21
MBZ

はい、NaNが他の数値と等しくないという事実を利用して、それ自体を含む

NaNの意味、つまり「通常の」浮動小数点値で表すことが実際には自分の力の範囲内にない値を作成したという事実を考えると、それは理にかなっています。

したがって、それらが何であるかわからない2つの数値を作成する場合、それらが等しいとはほとんど考えられません。それらはmayであるかもしれませんが、それが(実際には無限である)数の可能性がかなり大きいことを考えると、2つが同じ数である可能性はほとんどありません:-)

isnan(Cの場合はmath.h、C++の場合はcmath)のような関数(実際にはマクロ)を探すか、NaNというプロパティを使用することができます。値は、次のようなものでそれ自体と等しくありません。

if (myFloat != myFloat) { ... }

奇妙な理由で、C実装にisnanがない場合(標準で義務付けられているため、そうする必要があります)、次のように独自にコーディングできます。

int isnan_float (float f) { return (f != f); }
31
paxdiablo

Linux/gccの下には、BSD4.3に準拠したisnan(double)があります。

C99は、fpclassify(x)およびisnan(x)を提供します。
(ただし、C++標準/コンパイラには必ずしもC99機能が含まれているとは限りません。)

Std :: numeric_limit <> ...をチェックする方法があるはずです...

ドー。私は知っているべきでした...この質問は以前に回答されています... double(またはfloat)がC++でNaNであるかどうかを確認しますC++でNaNを使用しますか?http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan

7
Mr.Ree