参照
"NaNの"苦悩-フライングフィッシュ・ワールド- CSDNは、ブログ
、ウィキペディア- NaNの
NaNはC ++で-どのようにどのようなチェックのためのITおよびITのISへ- ?GeeksforGeeks
序文
NaN(「非数」)である特別な浮動小数点型浮動小数点演算によって生成されたいくつかの未定義の結果の定義については、1985年に導入されたとき、IEEE754。多くの言語の導入に現在のNaN異なり、INFまたは-INF、それは特定の浮動小数点値ではない、それは浮動小数点演算によって生成された未定義の結果の一種であり、それは別の主題として理解することができます。 Pythonなど、この定義は、のようにMathWorks社のMATLAB。もちろん、時間の計算には、通常、めったにはNaNを満たしていませんが、イベントが異常な結果を引き起こすだろう、と多くの反復または計算に付随しています。ので、多くの言語NaNはハンドルに一つのデータ型とみなし、エラーまたは例外が、このプログラムに関連する特に反復行列計算の多くになります、時限爆弾プログラムの場合は表示されません。誰かが確率的勾配降下法を呼び出すと、通常は反復計算は収束の多くを行います必要とするときに、苦味を食べました。NaNである場合は、あなたのプログラムが突然それらの場所で慎重にそれをチェックするために戻る前に、このような状況に遭遇した場合には非常に明白な特徴行列の計算速度は、通常10〜100倍よりも遅くなりますありはNaNを紹介します。ここではいくつかの操作がNaNを発生しています
NaNには、次の3つの事業を展開してい返します。
- オペランドの少なくとも一方がNaNの操作であります
- 未定義
- 次の分割:0/0、∞/∞、∞/-∞、-∞/∞、-∞/-∞
- 次の乗算:0×∞、0×-∞
- 以下の追加:∞+(-∞)、( - ∞)+∞
- 以下の減算:∞ - (-∞)、( - ∞) - ∞
- 実数演算結果を複数生成します。例えば:
- 負の数の平方根
- 負の対数演算で
- 比較+1 -1アークサイン又は逆余弦演算を実行するの数よりも小さいまたは大きいです
ナンでないデータを確認する方法
方法:使用して「==」それは実数であるかどうかを判断するために、結果trueを返し、ナンデータはfalseを返します。
#include<iostream>
#include<cmath>
int main()
{
float a = sqrt(2);
float b = sqrt(-2);
a == a ? std::cout << "real number" << std::endl;
std::cout << "nan number" << std::endl;
b == b ? std::cout << "real number" << std::endl;
std::cout << "nan number" << std::endl;
return 0;
}
オプション2: "ISNAN()" 機能
#include<iostream>
#include<cmath>
int main()
{
float a = sqrt(2);
float b = sqrt(-2);
isnan(a) ? std::cout << "nan number" << std::endl;
std::cout << "real number" << std::endl;
isnan(b) ? std::cout << "nan number" << std::endl;
std::cout << "real number" << std::endl;
return 0;
}
ナンのポイント
pcl::pointXYZI nan_point;
nan_point.x = NAN;
nan_point.y = NAN;
nan_point.z = NAN;