MFIの計算で0除算が発生する時がある
銘柄3111に対してMFI_new(13)で計算すると0除算が発生した。 runtime error in X:\Protra_2.0\lib\TIlib.pt:1662: divided by 0 エラーが発生したので実行を中断します。 該当箇所は以下 if obj[3][0] == 0.0 obj[1] = 0.0 else obj[1] = 100.0 / (obj[2][0] / obj[3][0] + 1) end 発生時の obj[2][0] と obj[3][0] の値は以下の通り 3111 オーミケンシ 98/08/05 obj[2][0] = -1.3992226181122E-13 3111 オーミケンシ 98/08/05 obj[3][0] = 1.3992226181122E-13 (obj[2][0] / obj[3][0] + 1) = 0 となるため、0除算となる。
これまでProtra言語は、非常に小さな浮動小数点数を0と見なす処理を行っていませんでした。浮動小数点演算では本来0になるはずの値が誤差で0からずれるので、非常に小さな値を0と見なさなければなりません。この処理を#30936で実装しました。これからはobj[3][0] == 0.0が真になるので、0除算は起こらなくなります。
Details