last updated:2023/12/27
浮動小数点数版(統合版)の秀丸エディタは、秀丸マクロの数値型変数に浮動小数点数を格納できるようにしたものです。
マクロの文法は、数値 (リテラル) の書き方以外は100%互換がありますが、
前者は比較的単純な話で、例えば、
というのは浮動小数点数版では正常なコーディングですが、通常版ではエラーになります。
また、通常版秀丸エディタでは、4 バイトの符号付き整数(-2147483648〜+2147483647)なので、極端に大きい/小さい値を扱っている場合、浮動小数点版では問題ないが通常版では値がおかしくなります。
後者の例としては、/(除算)の演算結果を変数に格納すると、通常版秀丸エディタでは整数の商が入り、余りが切り捨てられます。しかし、浮動小数点数版秀丸エディタでは、小数まで含んだ解が入ります。
その除算の結果をもとに条件判定すると、通常版と浮動小数点数版とで動作が異なる場合が出てきます。
以下の例は、#space個の半角スペースを$spaceに格納する例です。単にループして半角スペースを1個ずつ足していくよりも、以下のようにしたほうが秀丸マクロでは実行速度が出ます。
以下のコーディングでは、通常版では正しく動作しますが、浮動小数点数版で動作させると、 whileループが意図したよりも1回多く回ることになります。
例えば #space == 10 の場合、#space / 80 == 0 であり、whileループの中のコードは実行されないというのが意図している動作です。浮動小数点数版では、#space / 80 == 0.125 であるため、whileループの中のコードが1回実行されてしまいます。
$space = "";
#sp1 = #space / 80;
#sp2 = #space % 80;
while (#sp1 > 0) {
$space = $space + $space80;
#sp1 = #sp1 - 1;
}
$space = $space + leftstr($space80, #sp2);
通常版も浮動小数点数版も同様に動作させるための方法は、意図している動作とロジックの関係で、必ずしも一概にはいえませんが、この例の場合、while文を
while (#sp1 >= 1) {
と変更することで、通常版も浮動小数点数版でも同様に動作するようになります。
あるいは、常に整数の商を得るため、
#sp1 = (#space - (#space % 80)) / 80;
としてもよいでしょう。