1

次の質問が与えられた場合、ゼロ防止による除算とそれが NaN であるかどうかを確認する例として、次のコードを作成しました。

#include <cstdlib>
#include <iostream>
#include <map>
#include <windows.h>
using namespace std;
bool IsNonNan( float fVal )
{ 
     return( fVal == fVal );
}

int main(int argc, char *argv[])
{
    int nQuota = 0;
    float fZero = 3 / (float)nQuota; 
    cout << fZero << endl;
    cout << IsNonNan( fZero ) << endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}

なぜ return がIsNonNantrue なのですか? また、なぜint nZero = 3 / (float)nQuota;出力するのでしょうか: -2147483648?

4

3 に答える 3

2

3 / 0では+INFありませんNaN。試してみてください0 / 0

于 2012-07-11T22:33:14.733 に答える
1

Not, is not, NaN は「Not a Number」を意味します。つまり、数値として表現できないもの (0 / 0数学的に言えば、数値表現を持たない不確定要素)、無限、まさにそれ、無限大です。 、正または負

float が無限大かどうかを確認するには、次を使用できます。

inline bool IsInf(float fval)  {
    return (fval == fval) && ((fval - fval) != 0.0f);
}
于 2012-07-11T22:45:30.577 に答える
0

int nZero = 3 / (float)nQuota;to-2147483648の変換は全体で与えられた<= の値以下であるため、出力します。0float1e-009float f = 0.000000001;

于 2012-07-11T22:51:37.440 に答える