● StrCalc 概要

4-1. 比較演算(条件式)

比較演算は、2つの実数値の大小関係、一致・不一致の比較を行います。計算結果は、真の場合は 1 、偽の場合は 0 となります。

例1.

               3270 > 12    真なので結果は 1

       69937 <= 0.000392    偽なので結果は 0

             8192 = 8192    真なので結果は 1

                  2 != 7    真なので結果は 1

否定 ! は、値が 0 の場合は真、それ以外は偽となります。

例2.

       !0    真なので結果は 1

    !6639    偽なので結果は 0

否定はゼロとの比較と同じです。

       !0  →  0 = 0      0 と一致するので真

    !6639  →  6639 = 0   0 と一致しないので偽

否定の記号 ! は数値の前に置く必要があります(「演算子」参照の事)。


一致・不一致の比較は、記述の仕方によっては、演算誤差の影響で正確な結果を得られない場合があるので注意が必要です。

問題がある形の一例.

    (7200 + 7200 * 8 / 100) = (7200 * (1 + 8 / 100))

この場合、左辺は 7776 となりますが、右辺は演算誤差により 7776.000000000001 となるため、結果は不一致となります。
計算目的にもよりますが、もし、小数点以下切捨てなのであれば、関数 int を使用してください。

    int(7200 + 7200 * 8 / 100) = int(7200 * (1 + 8 / 100))

実数で比較する場合は、差の絶対値と、0 と見なせる値との比較を行います。

    abs((7200 + 7200 * 8 / 100) - (7200 * (1 + 8 / 100))) <= 1e-6

        二つの式の差が 0 と見なせる値以下の場合は一致、
        それ以外は不一致



4-2. 比較演算と論理演算

複数の比較は論理演算で接合する事ができます。

例3. 変数x が 32 〜 684 の範囲内にあるか調べる.

    x >= 32 & x <= 684

この場合は、x が 32 以上、且つ 684 以下の時は真、それ以外は偽となります。

論理演算での接合自体は特別な機能ではなく、それぞれの演算の組み合わせです。比較の結果は 1 または 0 になるので、それを論理演算によって計算する事になります。

例4. 変数y が英文字であるかを調べる.

    y >= 'A' & y <= 'Z' | y >= 'a' & y <= 'z'

論理演算との併用では、計算の優先順に注意してください。できれば括弧の使用をお勧めします。
適度の括弧は、優先順の問題を避けるだけでなく、優先するべき箇所が強調され見易くもなります。

    ((y >= 'A') & (y <= 'Z')) | ((y >= 'a') & (y <= 'z'))

比較と論理演算を記述する時の注意点として、演算順序に依存する構成にはしないでください。

例5.

    (x != 0) & (150 / x > 0)

論理演算は「計算」なので、最初の比較が偽であっても、後続の比較も実行されます。
そのため、例5 でx が 0 の場合、STATUS_DIVIDEBYZERO が発生します。