私はパラメータとして2つの数値を受け取り、ANSI Cで関数を書いています。パラメータは、int
またはfloat
タイプです。番号は、私のフィルタによれば有効かもしれません。何らかの価値を意味する失敗を返すにはどうすればよいですか?戻り値の型はfloat
です。私の頭に浮かぶ最初のものは、NaN
抽象タイプでした。しかし、私は
ANSI Cでそれを表現する方法がわからない(私の悪い英語のため申し訳ありません。英語は私の母国語ではない)
私はパラメータとして2つの数値を受け取り、ANSI Cで関数を書いています。パラメータは、int
またはfloat
タイプです。番号は、私のフィルタによれば有効かもしれません。何らかの価値を意味する失敗を返すにはどうすればよいですか?戻り値の型はfloat
です。私の頭に浮かぶ最初のものは、NaN
抽象タイプでした。しかし、私は
ANSI Cでそれを表現する方法がわからない(私の悪い英語のため申し訳ありません。英語は私の母国語ではない)
NaNは抽象型ではありません。これは浮動小数点データの値です。
「ANSI C」によってあなたは(同じくらい、それが1つを持っているように、用語の実際の意味である)標準Cを、意味場合<math.h>
とナンを生成するためにNAN
マクロを使用し、isnan(x)
を含む1つを検出するために、 。
"ANSI C"とは、長らく置き換えられたC89標準(正式なものではないものの、形式的に正しいものでも)を意味する場合、0./0.
でNaN値を生成し、x != x
。
質問数がに応じて有効ではない可能性があり、私のc。で述べたように
if (x != x) // x is NaN
:?「フィルタは、その後どのように私はあなたがこれを使用することができ
失敗を意味するいくつかの値を返す代わりにはNaNに対して数を比較しますこの式0.f/0.f
を使用して、C89にfloat
のNaN値を生成することができます。
OPはNaNをチェックする方法を尋ねませんでした。 –
は、あなたがそれを行うことはできません。この
if(your_variable != your_variable)
{
return 0; //catch 0 as the failure returned value
}
else
{
//your code
}
-1この回答は何も説明していないので、NaNの使い方をすぐに知ることができない人には非常に混乱するようなコードが含まれています。 '0'は完全に合理的な戻り値かもしれないからです。 –
のようなものを持って、あなたは、2つの変数が、値の1、失敗フラグのための1つを返さなければなりません。
たとえば、通常の操作の場合、関数がtrueを返すように設定できます。 偽(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
}
@OliCharlesworth:でもそれはC99 – Jack
です。答えの1つは「0.0/0.0'」です。 –
絶対に移植可能な方法はありません。NaNはC89には存在せず、C99では必須でもありません。 – effeffe