MathClassify

浮動小数点数の型を判別して、ENUM_FP_CLASS列挙からの値として結果を返します

ENUM_FP_CLASS  MathClassify(
  double  value      // real number
  );

パラメータ

value

[in]  確認対象の浮動小数点数

戻り値

ENUM_FP_CLASS列挙体からの値

ENUM_FP_CLASS

ID

説明

FP_SUBNORMAL

表現可能な最小の正規数DBL_MIN(2.2250738585072014e-308)よりもゼロに近い非正規数

FP_NORMAL

2.2250738585072014e-308〜1.7976931348623158e+308の範囲にある正規数

FP_ZERO

正または負のゼロ

FP_INFINITE

適切な型で表すことができない数、正または負の無限大

FP_NAN

数字でない

例:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
//--- test NaN
double nan=double("nan");
PrintFormat("Test NaN: %G is %s, MathIsValidNumber(NaN)=%s",
            nan,
            EnumToString(MathClassify(nan)),
             (string)MathIsValidNumber(nan));
//--- test infinity
double inf=double("inf");
PrintFormat("Test Inf: %G is %s, MathIsValidNumber(inf)=%s",
            inf,
            EnumToString(MathClassify(inf)),
             (string)MathIsValidNumber(inf));
//--- test normal value
double normal=1.2345e6;
PrintFormat("Test Normal: %G is %s, MathIsValidNumber(normal)=%s",
            normal,
            EnumToString(MathClassify(normal)),
             (string)MathIsValidNumber(normal));
//--- test subnormal value
double sub_normal=DBL_MIN/2.0;
PrintFormat("Test Subnormal: %G is %s, MathIsValidNumber(sub_normal)=%s",
            sub_normal,
            EnumToString(MathClassify(sub_normal)),
             (string)MathIsValidNumber(sub_normal));
//--- test zero value
double zero=0.0/(-1);
PrintFormat("Test Zero: %G is %s, MathIsValidNumber(zero)=%s",
            zero,
            EnumToString(MathClassify(zero)),
             (string)MathIsValidNumber(zero));
}
/*
Result:
  Test NaN: NAN is FP_NAN, MathIsValidNumber(NaN)=false
  Test Inf: INF is FP_INFINITE, MathIsValidNumber(inf)=false
  Test Normal: 1.2345E+06 is FP_NORMAL, MathIsValidNumber(normal)=true
  Test Subnormal: 1.11254E-308 is FP_SUBNORMAL, MathIsValidNumber(sub_normal)=true
  Test Zero: -0 is FP_ZERO, MathIsValidNumber(zero)=true
*/
//+------------------------------------------------------------------+

参照

浮動小数点数型(ダブル、フロート), MathIsValidNumber