相場のデータを分析する際には大量の数値データを処理することになります。
コンピュータで小数は一般的に有限の桁数の2進数で表現されます。10進数でキリのよい小数でも、2進数では無限小数となる場合があります。例えば、10進数の 0.1 を、2進数で表現すると 0.000110011001100…. と無限に 1100 が続きます。コンピュータでは有限桁の2進数で表現するので、厳密に同じ値を表現することができず、誤差が生じます。この誤差のことを「丸め誤差」と呼びます。
このため、コンピュータで小数を取り扱う際には注意が必要です。
MT4 で 0.1 を100万回足し合わせてみます。
float s = 0;
for (int i = 0; i < 1000000; i++)
s += 0.1;
Print(s);
単精度浮動小数点数(float)の場合、結果は 100958.34375 になります。「情報落ち」(大きさが極端に異なる数同士を加減算すると精度が落ちる現象)が発生する結果、本来の値から大きく異なる結果となってしまいます。
double s = 0;
for (int i = 0; i < 1000000; i++)
s += 0.1;
Print(s);
倍精度浮動小数点数(double)の場合、100000.0000013329 になります。
メモリを節約したいなどの理由が特になければ、数値計算には倍精度浮動小数点数を使うことをオススメします。(一方で、精度があまり結果に影響しないディープラーニングでは、単精度や半精度浮動小数点数を使う場合もあります。)
数値計算においては、この他にもさまざまな「落とし穴」があります。
基礎的なことを知りたい方は「数値計算の常識」がオススメです。
FXなら最狭水準スプレッドのFXTF
コメント