リテラル

リテラルは、処理のために FormCalc に渡されるすべての値の基となる定数値です。リテラルの 2 つの一般的な型は数値と文字列です。

数値リテラル

数値リテラルは、整数、小数点、小数部、指数(「e」または「E」)およびオプションの符号付き指数値のうち 1 つまたは複数から成る、数字中心のシーケンスです。以下はすべてリテラル数の例です。

  • -12

  • 1.5362

  • 0.875

  • 5.56e-2

  • 1.234E10

リテラル数では、整数部または小数部のいずれかを省略できますが、両方を省略することはできません。また、小数部内では、小数点または指数値のいずれかを省略できますが、両方を省略することはできません。

数値リテラルはすべて、内部的に Institute of Electrical and Electronics Engineers(IEEE)の 64 ビットバイナリ値に変換されます。ただし、IEEE 値では有限数しか表現できないので、一部の値は 2 進小数としての表現を持ちません。これは、1/3 などの値を小数として正確に表現できないことに似ています(10 進値で完全に正確に表現するには、無限の小数桁数が必要です)。

このような、相当する 2 進小数を持たない値のセットにあたるのは、一般的に、指数の前に 16 を超える有効数字を持つ数値リテラルです。FormCalc は、IEEE 標準に従って、これらの値を表現可能な最も近い IEEE 64 ビット値に四捨五入します。例えば、次の値

    123456789.012345678

は、(最も近い)次の値に四捨五入されます。

    123456789.01234567

一方、次の数値リテラル

    99999999999999999 

は、(最も近い)次の値に四捨五入されます。

    100000000000000000

この動作は、予期しない結果になることがあります。FormCalc には、小数点以下を指定桁数に四捨五入した特定の数値を返す関数 Round があります。渡された数値が 2 つの表現可能な数値のちょうど中間値である場合は、ゼロと逆方向に数値を四捨五入します。つまり、数値が正の値の場合には数値は切り上げられ、負の値の場合には数値は切り捨てられます。したがって、次の例で、

    Round(0.124, 2)

は、0.12 を返します。

また、

    Round(.125, 2)

は、0.13 を返します。

このように変換されることから考えると、

    Round(0.045, 2)

は、0.05 を返します。

IEEE 754 標準では、数値リテラル 0.045 の近似値は 0.0449999999999999 であることが指示されています。この近似値は 0.05 よりも 0.04 に近い値です。したがって、

    Round(0.045, 2)

は、0.04 を返します。

これは、IEEE 754 標準にも合致します。

IEEE の 64 ビット値は、NaN(Not a Number)、+Inf(正の無限値)および -Inf(負の無限値)などの表現をサポートしています。FormCalc はこれらをサポートしていないので、NaN、+Inf または -Inf のいずれかに評価される式はエラー例外となり、式の残りの部分に渡されます。

文字列リテラル

文字列リテラルは、2 つの引用符で囲まれた、Unicode 文字のシーケンスです。次に例を示します。

    "The cat jumped over the fence." 
    "Number 15, Main street, California, U.S.A"

文字列リテラル "" は、空文字列と呼ばれる、テキスト文字の空のシーケンスを定義します。

リテラル文字列内に引用符(")文字を埋め込むには、2 つの引用符を挿入する必要があります。次に例を示します。

    "The message reads: ""Warning: Insufficient Memory"""

すべての Unicode 文字には、¥u の後に 4 桁の 16 進数が付加された、6 文字の対応するエスケープシーケンスがあります。リテラル文字列内では、対応する Unicode エスケープシーケンスを使用して、制御文字などのすべての文字を表すことができます。次に例を示します。

    "\u0047\u006f\u0066\u0069\u0073\u0068\u0021" 
    "\u000d" (carriage return) 
    "\u000a" (newline character)