1

double値が aNaNまたは の場合の動作を分離したいと思い#INFます。を検出するためにNaN、テストします

doubleVal != doubleVal

はどう#INFですか?が の場合、このテストは true になりますdoubleVal#INF?

4

3 に答える 3

4

1.ではないことを確認したら、 で乗算するのはNaNどうですか?

http://ideone.com/97FNu

isinfとを使用することもできますがisnan、実装によってはオーバーヘッドが発生する場合があります。

3 番目の代替手段は、C max 値マクロ (または同等のものstd::numeric_limits) を使用することです。

 bool is_inf_or_nan(double x) 
{
    return !(x <= DBL_MAX && x >= -DBL_MAX); 
}    
于 2012-04-12T09:15:02.790 に答える
3

C++11 を使用していない場合は、<boost/math/special_functions/fpclassify.hpp>代わりにが必要になり<cmath>、対応する名前空間が変更されます。

#include <cmath> // or <boost/math/special_functions/fpclassify.hpp>
// ...

    if(isinf(num)){
        // ...
    }
于 2012-04-12T09:11:17.240 に答える
2

There is also a header-only library present in Boost that have neat tools to deal with floating point datatypes

#include <boost/math/special_functions/fpclassify.hpp>

You get the following functions:

template <class T> bool isfinite(T z);
template <class T> bool isinf(T t);
template <class T> bool isnan(T t);
template <class T> bool isnormal(T t);
于 2012-04-12T09:14:41.823 に答える