数値誤差にご注意!

MT4

相場のデータを分析する際には大量の数値データを処理することになります。

コンピュータで小数は一般的に有限の桁数の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 になります。

メモリを節約したいなどの理由が特になければ、数値計算には倍精度浮動小数点数を使うことをオススメします。(一方で、精度があまり結果に影響しないディープラーニングでは、単精度や半精度浮動小数点数を使う場合もあります。)

数値計算においては、この他にもさまざまな「落とし穴」があります。

基礎的なことを知りたい方は「数値計算の常識」がオススメです。

本サイトの内容は、投資の勧誘を目的としたものではなく、本サイト内の情報に基づいて行った取引の損失について、本サイトは一切の責を負いかねます。当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。免責事項もご覧ください。

MT4MT5
AIでFX

コメント

タイトルとURLをコピーしました