私のプログラムでは、通常、値をゼロで割ったときに無限大が発生します。ゼロをゼロで割ると不定になります。C++ で無限値と不定値をチェックするにはどうすればよいですか?
C++ では、無限大は 1.#INF で表されます。不確定は -1.#IND で表されます。問題は、変数が無限か不確定かをテストする方法です。無限のチェックは比較的簡単です。特定の C++ で無限の定義を見つけることができます。私の場合 (VS2003) では、std::numeric_limits::infinity() です。それを使用するには、「制限」を含める必要があります。この無限値を変数に代入し、その値をある値と比較して、その値が無限かどうかを確認できます。
不確定値を他の値と比較することはできないため、不確定は少し注意が必要です。どの比較も false を返します。このプロパティを使用して、それ自体と比較することで不確定値を検出できます。aVal という double 変数があるとします。通常、aVal != aVal は false を返します。ただし、値が不定の場合、aIndVal != aIndVal は true を返します。この奇妙な状況は、無限値には存在しません。つまり、aInfVal != aInfVal は常に false を返します。
不定値と無限値をチェックするために使用できる 2 つの関数を次に示します。
#include "limits.h"
#include "math.h"
bool isIndeterminate(const double pV)
{
return (pV != pV);
}
bool isInfinite(const double pV)
{
return (fabs(pV) == std::numeric_limits::infinity())
}
これらのチェックのためのより良い方法はありますか?何か不足していますか?