小数点を含む計算をする場合の注意点

Eyecatch システムトレード実践編

今回の記事は、「小数点を含む計算をする場合の注意点」です。

小数点を含む計算をしている場合、計算結果はどう考えてもイコールなのにif文が通らないことがあります。

例えば0.7 / 0.1ですが、普通に考えた場合、計算結果は7になります。

ですが、下記のコードをコンパイルしてみて結果を算出してみると0.69999999になります。

double aaa = NULL;
  
aaa = 0.7/0.1;
   
Comment("aaa = "+(string)aaa);

これはIEEE754の仕様で、特定の数値の場合に近似値になることが原因です。

上記の場合、if( aaa == 7 )のif分は通りませんし、もし小数点以下を切り捨てる処理をした場合、7ではなく6になりますので、算出結果がおかしいことになります。

基本的にはNormalizeDouble()関数を使用して数値を整えれば問題なくなります。

計算結果上特に問題ないと思われる場合でも数値の誤差が発生した場合に問題になる箇所には必ずNormalizeDouble()関数を使用して数値を整えておいた方が無難になります。

注意

内容には注意を払っていますが、保障は出来ません。
実際に運用する場合は、自己責任でお願いします。 

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