9

重複の可能性:
CでのNaNリテラル?

2つの数値をパラメーターとして受け取るANSICで関数を作成しています。パラメータはintまたはfloatタイプです。私のフィルターによると、この番号は有効な場合と無効な場合があります。失敗を意味する値を返すにはどうすればよいですか?戻りタイプはfloatです。最初に頭に浮かんだのはNaN抽象型でした。しかし、ANSICでそれを表現する方法がわかりません。

(私の悪い英語でごめんなさい。英語は私の母国語ではありません)

4

4 に答える 4

13

NaNは「抽象型」ではありません。これは浮動小数点データムの値です。

「ANSIC」とは、標準C(用語の実際の意味であり、それがあればそれだけです)を意味する<math.h>場合は、マクロを含めて使用しNAN、nanを生成しisnan(x)て検出します。

「ANSIC」が実際に長く置き換えられたC89標準を意味する場合(正式に正しくない場合でも、一部の人々が意図している)、でNaN値を生成し0./0.、で1つをチェックできx != xます。

于 2013-01-05T18:41:34.967 に答える
5

私の「フィルター」によると、数値が有効でない可能性があるという質問です。失敗を意味する値を返すにはどうすればよいですか?

数値をNaNと比較する代わりに、次を使用できます。

if (x != x)  // x is NaN

コメントで述べたように、この式を使用してC89でNaN値0.f / 0.fを生成できます。float

于 2013-01-05T18:39:12.853 に答える
2

それはできません。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
}
于 2013-01-05T18:48:01.527 に答える
-2

このようなものを持っている

if(your_variable != your_variable)
{
    return 0; //catch 0 as the failure returned value
}
else
{
    //your code
}
于 2013-01-05T18:46:06.333 に答える