- 整数型
- 浮動小数点数型(double、float)
- 複素数(complex)
- 文字列型
- 構造体、クラス、インターフェイス
- 動的配列オブジェクト
- 行列とベクトル
- 型キャスト
- Void 型とNULL 定数
- ユーザー定義型
- オブジェクトポインタ
- 参照: 修飾子「 & 」とキーワード「 this 」
浮動小数点数型(double、float)
実数型(または浮動小数点型)は、小数部分を持つ値を表します。MQL5 言語には 2 種類の浮動小数点型があります。コンピュータメモリ内での実数値の表現方法は、IEEE 754 標準によって定義され、プラットフォーム、オペレーティングシステムまたはプログラミング言語とは無関係です。
Type |
バイトサイズ |
最小の正の値 |
最大値 |
C++ |
---|---|---|---|---|
float |
4 |
1.175494351e-38 |
3.402823466e+38 |
float |
double |
8 |
2.2250738585072014e-308 |
1.7976931348623158e+308 |
double |
double という名称は、その数値の精度が float の 2 倍であるということを示しています。ほとんどの場合 double 型が一番便利です。float の限られた精度は多くの場合に充分ではありません。float 型がまだ使用されているのはメモリ節約のためです(これは実数の大きな配列のために重要です)。
浮動小数点定数は、整数部、点( . )と小数部で構成されています。整数部と小数部は十進数の配列です。
例:
double a=12.111;
|
実数には科学表記があり、多くの場合、科学表記での記録は、従来のものよりもコンパクトです。
例:
double c1=1.12123515e-25;
|
実数は、一般的に 10 進表記が使用されていてもメモリでは限られた精度を持つ 2 進数システムで格納されていることを忘れてはなりません。これが、10進数では正確に表現されている数字の多くが 2 進数システムでは無限小数としてのみ書くことが可能な理由です。
例えば、2 の冪乗である 0.25 が正確に保存されているのに比べて、0.3 及び 0.7 はコンピュータによって無限小数として表されます。
この点から、2 つの実数の平等さを比較することは不正なので推奨されません。
例:
void OnStart()
|
どうしても 2 つの実数の平等さを比較する必要がある場合は、2 つの方法があります。最初の方法は、2 つの数の差を比較の精度を指定する小さな数と比較することです。
例:
bool EqualDoubles(double d1,double d2,double epsilon)
|
上記の例では epsilon の値は事前定義された定数 DBL_EPSILON より小さく出来ないことにご注意ください。この定数の値は 2.2204460492503131e-016 です。float 型に対しての定数は FLT_EPSILON = 1.192092896e-07 です。これらの値は 1.0 + DBL_EPSILON = 1.0(float 型の値に対しては 1.0 + FLT_EPSILON!= 1.0)を満たす最小値です。
2 つ目の方法では 2 つの実数の正規化後の差分とゼロを比較します。正規化された数との数学的な操作は、非正規化された結果をもたらすので、正規化された数の差をゼロと比較することは無意味です。
例:
bool CompareDoubles(double number1,double number2)
|
数学コプロセッサでの演算は無効な実数をもたらすことがあります。無効な実数との演算の結果は定義されていないため、そのような実数は数学演算や比較の演算に使用することは出来ません。例えば、2 のアークサインを計算しようとすれば、結果は負の無限大です。
例:
double abnormal = MathArcsin(2.0);
|
負の無限大の他には正の無限大とNaN(非数)があります。数の無効性を決定するためには MathIsValidNumber() が使用出来ます。IEEE標準によれば、これらには特殊な機械表現があります。例えば、double 型の正の無限大は 0x7FF0 0000 0000 0000 です。
例:
struct str1
|
参照