数式について

数値

数値は、1234.567 のように入力します。 浮動小数点表記 (例: 1.23e-4 (= 1.23×10-4)) も使用できます。 いわゆる全角文字は使えません。

虚数は数値に i を付けて表します。 (例: 3i9.8e+6i)

単に i と書いただけでは変数i とみなされます。 よって、初期状態では i を虚数単位として使うことはできません。 しかし変数 i に虚数単位の値を代入しておくと、i を虚数単位として使えるようになります。

i = 1i

整数を書くときは、十進法の代わりに二進法・八進法・十六進法が使えます。 それぞれ数字の頭に 0b0o0x を付けて表します。 大文字でも小文字でも構いません。また桁数の制限はありません。

二進法表記の例
0b11001010
0B00100100
八進法表記の例
0o12345670
0O07654321 (大文字の O (オー) は数字の 0 と紛らわしいのでお奨めしません。)
十六進法表記の例
0x169A
0Xcafe

小数の精度

小数には、精度があります。入力された桁数に見合った精度が自動的に設定されます。 例えば、小数 123.45 は (約) 5 桁の精度、0.1000 は (約) 4 桁の精度となります。もちろん 100.00100.0000 とでは同じ 100 でも精度が違います。

計算結果の精度は、元の値の精度によって自動的に設定されます。例えば、 1.0+2.0 の結果は 3.0 に、1.000+2.000 の結果は 3.000 になります。

小数の最後に x を付けると、精度を無限大にすることができます。例えば 1.234e+5 の精度は (約) 4 桁ですが、x を付けて 1.234e+5x にすると精度は無限大になります。精度が無限大の値の計算では、 できる限り正確な結果を得ようと試みます。つまり、結果が有限小数になる限り、 正確な結果が得られます (結果の精度もまた無限大になります)。結果が無限小数になるときは、 デフォルトの精度に値が丸められます。

整数に精度はありません。整数は常に正確にその整数の値を表します。

無限大と NaN

通常の実数や複素数のほかに、無限大も数値として扱うことができます。 無限大には、正の無限大・負の無限大・複素無限大の三種類があります。これらを式の中で使うには、 それぞれ @inf-@inf@cinf と入力します。 正の無限大・負の無限大は、それぞれ正と負の符号を持ちます。複素無限大には符号はありません。

0 を 0 で割ったり、正の無限大と負の無限大を足したりするような演算では、 結果の値は数学的には一意に定義されません。このような時、結果は NaN という特殊な値になります。NaN の値を式の中で使うには、@nan と入力します。

注意: 多くのプログラミング言語では、NaN の値同士を比較すると等しくないと判定されますが、 #Calc (#Script) では NaN 同士は等しいと判定します。

変数

変数に値を代入しておき、後でその値を使用することができます。変数に値を代入するには、代入演算子を使います。

変数の名前は、比較的自由に付けられます。記号でない文字ならばほとんどの文字が変数の名前に使えます。 ひらがなや漢字も使えます。ただし、変数の名前の一文字目を数字にすることはできません。 また記号 "_" も変数の名前に使えます。

次の変数が最初から定義されています。

変数名内容
eネイピア数 (自然対数の底)
pi円周率

その他の値

#Calc には、void・null・true・false という特殊な値があります。これらの値を入力するには、 それぞれアット記号を付けて @void@null@true@false と書きます。

関数

関数は次のようにして定義できます。

例えば、一次関数 f(x) = 2 x + 3 を定義するには、 次のように入力します。

f = @[x] { 2 x + 3 }

括弧 [ ] の中に関数の変数を書き、{ } の中に関数の値を書きます。

多変数関数 (例: @[x, y] { 2 x + 3 y }) や定数関数 (例: @{ 3 }) も定義できます。定数関数では括弧 [ ] を省略できます。

実際に関数の値を求めるときも、括弧 [ ] を使います。例えば f[3] と入力すると、f(3) の値つまり 9 が出力されます。 (結合演算子を使って、単に f 3 と書いても構いません。)

最初から定義されている組込み関数の一部を以下に挙げます。

演算子

使用できる主な演算子は以下の通りです。

+ x
何もしません。
x + y
xy を足します。
- x
x の符号を反転します。
x - y
x から y を引きます。
x * y
xy を掛けます。
/ x
x の逆数を求めます。
x / y
xy で割ります。
x \ y
xy で割り、整数の商を求めます。
x % y
xy で割り、余りを求めます。
x ^ y
x ** y
xy 乗を求めます。
( x )
演算順位を変更します。(2 * 3) + 4 のように他の演算子と組合わせて使います。
x = y
xy を代入します。x は変数でなければなりません。

比較演算子もあります。二つの値を比較し、条件が満たされているかどうかを調べる演算子です。 演算の結果は、条件が満たされているなら true、満たされていなければ false という値になります。

複素数の比較は、等しいか等しくないかのみ調べることができます。 複素数の大小を比較すると (虚部が 0 でも) 常に false になります。

x == y
xy と等しい
x != y
xy と等しくない
x < y
xy より小さい
x > y
xy より大きい
x <= y
xy より小さいか等しい
x >= y
xy より大きいか等しい

このほか、次の演算子があります。

!! x
x が void・null・false のどれかなら false、そうでなければ true が結果になります。
! x
x が void・null・false のどれかなら true、そうでなければ false が結果になります。
x && y
x が void・null・false のどれかなら x、そうでなければ y が結果になります。
x || y
x が void・null・false のどれかなら y、そうでなければ x が結果になります。
x ? y : z
x が void・null・false のどれかなら z、そうでなければ y が結果になります。
++ x
-- x
x ++
x --
C 言語などでおなじみのインクリメント・デクリメント演算子です。 x の値に 1 を加算・減算し、その結果を x に代入します。 x は変数でなければなりません。
@exists x
変数 x が存在するかどうかを判定します。結果は true または false になります。
@delete x
変数 x を削除します。結果は変数が削除される前に代入されていた値になります。
複合代入演算子
C 言語などでおなじみの += などの演算子です。演算と代入を同時に行います。 例えば、x += 3x = x + 3 を表します。-=*= のほかに、&&=^= など、 比較演算子以外の全ての二項演算子に対して複合代入演算子が使えます。
結合演算子
見えない演算子です。例えば 3 x のように値を続けて書いた場合、3 と x を掛け算します。左側が数値ではなく関数のときは、掛け算ではなく関数の適用になります。 (結合演算子を使うときは、二つの値を空白で区切ってください。3x のようにくっつけて書くことはできません。)
x === y
x !== y
同一性比較演算子です。詳しくは #Script 仕様をご覧下さい。
@bind x
関数をバインドします。詳しくは #Script 仕様をご覧下さい。

演算子の優先順位は、次のようになっています。(括弧が最初に計算され、代入が最後に行われる。)

  1. 括弧
  2. 関数呼出し・メンバ参照
  3. 後置単項演算子 (++--)
  4. 冪乗 (**^)
  5. 前置単項演算子 (+-/!!!++--)
  6. 結合演算子
  7. 乗除算 (*/\%)
  8. 加減算 (+-)
  9. 比較 (==!=<><=>=)
  10. 同一性比較 (===!==)
  11. 条件演算子 (&&)
  12. 条件演算子 (||)
  13. 条件演算子 (? :)
  14. 代入

ただし、冪乗演算子の右辺には前置単項演算子を使用できます。例えば、-a^-b^-c-(a^(-(b^(-c)))) と同じです。

優先順位が同じ演算子同士では、基本的に左から順番に演算が行われます。 ただし、前置単項演算子・冪乗・代入は右側が先になります。

© 2006-2007 magicant / version 1.2.10