重複の可能性:
CでのNaNリテラル?
2つの数値をパラメーターとして受け取るANSICで関数を作成しています。パラメータはint
またはfloat
タイプです。私のフィルターによると、この番号は有効な場合と無効な場合があります。失敗を意味する値を返すにはどうすればよいですか?戻りタイプはfloat
です。最初に頭に浮かんだのはNaN
抽象型でした。しかし、ANSICでそれを表現する方法がわかりません。
(私の悪い英語でごめんなさい。英語は私の母国語ではありません)
重複の可能性:
CでのNaNリテラル?
2つの数値をパラメーターとして受け取るANSICで関数を作成しています。パラメータはint
またはfloat
タイプです。私のフィルターによると、この番号は有効な場合と無効な場合があります。失敗を意味する値を返すにはどうすればよいですか?戻りタイプはfloat
です。最初に頭に浮かんだのはNaN
抽象型でした。しかし、ANSICでそれを表現する方法がわかりません。
(私の悪い英語でごめんなさい。英語は私の母国語ではありません)
NaNは「抽象型」ではありません。これは浮動小数点データムの値です。
「ANSIC」とは、標準C(用語の実際の意味であり、それがあればそれだけです)を意味する<math.h>
場合は、マクロを含めて使用しNAN
、nanを生成しisnan(x)
て検出します。
「ANSIC」が実際に長く置き換えられたC89標準を意味する場合(正式に正しくない場合でも、一部の人々が意図している)、でNaN値を生成し0./0.
、で1つをチェックできx != x
ます。
私の「フィルター」によると、数値が有効でない可能性があるという質問です。失敗を意味する値を返すにはどうすればよいですか?
数値をNaNと比較する代わりに、次を使用できます。
if (x != x) // x is NaN
コメントで述べたように、この式を使用してC89でNaN値0.f / 0.f
を生成できます。float
それはできません。1つは値用、もう1つは失敗フラグ用の2つの変数を返す必要があります。
たとえば、通常の操作の場合に関数がtrueを返すように設定できます。失敗した場合はfalse (NaN)。
結果を格納する変数は、参照によってパラメーターとして渡され、成功した場合の戻り値を保持します。
BOOL myFunction(int inInt, float inFloat, float *outResult)
{
/*
PROCESSING HERE
*/
// in case of failure
if( /* failure condition here */ )
{
*outResult = 0;
return false;
}
*outResult = /* your result */
return true;
}
// how to use the function
int a;
float b;
float result;
BOOL success;
success = myFunction(a, b, &result);
if(success)
{
// do whatever with your "result"
}
else
{
// NaN
}
このようなものを持っている
if(your_variable != your_variable)
{
return 0; //catch 0 as the failure returned value
}
else
{
//your code
}