浮動小数点数モード(Ver9.35対応版)
目次−
浮動小数点数モード
浮動小数点数版の秀丸エディタは、
setfloatmodeを実行することにより、浮動小数点数の計算ができます。
浮動小数点数版について
浮動小数点数版は、普段は通常版と全く同じように使っていただけます。
通常版のマクロを実行する上では互換性があります。
マクロ先頭にsetfloatmode 1;と書くことで、浮動小数点数の動作になります。
書かなければ、通常版と同じ動作になります。
64bit版においては、数値は通常版32bitと同じ扱いになります。
V7.00以降の浮動小数点数版との違いについて
V6.50未満の従来から、浮動小数点数版がありましたが、これは通常のマクロと互換性が無いものでした。(V6.50はβのみで正式なし)
V7.00以降の新しい浮動小数点数版は、マクロ仕様を変更して互換性を高めています。
- 従来の浮動小数点数版(V6.50未満)と新しい浮動小数点数版(V7.00以上)の違い
- 通常版(32bit)との互換性が保たれるようになった。
- 浮動小数点数を扱う場合、setfloatmode 1; を書く必要がある。
- msvcrt.dllに依存しない。
- 浮動小数点数版であるかどうか(if(1/2==0){...})の判断方法は使えない。
(マクロ先頭にsetfloatmode 1;を書き足すことで判断可能となります)
誤差について
浮動小数点数版は、C言語のdouble相当の浮動小数点数を扱っています。
浮動小数点数の計算は、一般的にデジタル計算する限りはほとんどの環境で誤差が出る性質になっています。
例えば「浮動小数点数 誤差」といったキーワードでWeb検索をするとデジタル計算に関する浮動小数点数の誤差に関するページが見つかると思います。
秀丸エディタの浮動小数点数も同じく誤差が出てしまいます。
例えば、以下の計算で誤差になります。
setfloatmode 1;
#a=-0.3+0.2+0.1;
message str(#a);
endmacro;
|
簡単に結果の表示だけを回避するには、結果を四捨五入したり、Format関数で整えたりするといいです。
//小数点以下2桁で四捨五入する例
setfloatmode 1;
#a=-0.3+0.2+0.1;
loaddll "HideMath.dll";
#a = dllfunc("Floor",(#a*100+0.5))/100;
message str(#a);
endmacro;
|
//小数点以下3桁で固定の例(1.000といったように0も出る)
setfloatmode 1;
#a=-0.3+0.2+0.1;
loaddll "HideMath.dll";
$a = dllfuncstr( "Format", "%.3lf", #a );
message $a;
endmacro;
|