算術演算子
この節では、数に適用されるすべての演算子と関数についてまとめます。この他にも多くの演算子がありますが、
ベクトルと行列,
幾何演算子, および
関数プロット の節で解説します。
挿入演算子
数学の基本的な演算子
+,
-,
*,
/,
はそのまま使えます。これらは、数とリストに適用できますが、演算の意味は、適用されるものによって違います。たとえば、
5+7
の結果は
12
であり、
[2,3,4]+[3,-1,5]
の結果は
[5,2,9]
です。
加法演算子: <expr>+<expr>
説明: 数(整数、実数、複素数) は、
+ 演算子で和が求められます。同じ形をしているリストでも和になり、成分ごとの和が求められます。
例:
式 | 結果
|
7 + 8 | 15
|
2.3 + 5.9 | 8.2
|
[2,3,4] + [3,4,6] | [5,7,10]
|
[2,3,[1,2]] + [3,4,[1,3]] | [5,7,[2,4]]
|
参照: 文字列演算子
減法演算子: <expr>-<expr>
説明: 数(整数、実数、複素数) は、
- 演算子で差が求められます。同じ形をしているリストでも差になり、成分ごとの差が求められます。また
- 演算子は、負(マイナス)記号としても使えます。
例:
式 | 結果
|
7 - 8 | -1
|
8.3 - 5.9 | 2.4
|
[2,6,4] - [3,4,6] | [-1,2,-2]
|
[5,3,[1,2]] - [3,4,[1,3]] | [2,-1,[0,-1]]
|
参照: 文字列演算子
乗法演算子: <expr>*<expr>
説明: 数(整数、実数、複素数) は、
* 演算子で積が求められます。数のベクトルまたは数の行列の場合は、演算可能な次元であれば積が求められます。詳しくは例を見てください。
例:
式 | 結果 | コメント
|
7 * 8 | 56 | 整数の積
|
(1+i) * (2+i) | 1+3*i | 複素数の積
|
2 * [5,3,2] | [10,2,4] | ベクトルの実数倍
|
[5,3,2] * 2 | [10,2,4] | ベクトルの実数倍
|
[2,2,3] * [3,4,6] | 32 | ベクトルの内積 (x_1,x_2,…,x_n)*(y_1,y_2, …,y_n)=(x_1*x_2+…+x_n*y_n)
|
[[1,2],[3,4]] * [1,2] | [5,11] | 行列と列ベクトルの積
|
[1,2] * [[1,2],[3,4]] | [7,10] | 行ベクトルと行列の積
|
[[1,2],[3,4]] * [[1,2],[3,4]] | [[7,10],[15,22]] | 行列の積
|
参照: ベクトルと行列
除法演算子: <expr>/<number>
説明: 数(整数、実数、複素数) は、
/ 演算子で商が求められます。
また、ベクトルは数で割ることができます。
例:
式 | 結果
|
56 / 8 | 7
|
[6,8,4] / 2 | [3,4,2]
|
べき乗演算子: <expr><expr>
説明:
数(整数、実数、複素数) のべき乗で、指数は整数に限らず、実数、複素数でも可能です。正式には
exp(b*ln(a))
が計算されます。(ln(a)は複素変数の対数関数)
ln(…)
は周期 2*pi
で定義されますので、 ab
は一般には多価関数です。 b
が整数でない場合には ab
は最初の主要な値を返します
例:
式 | 結果
|
52 | 25
|
5(-1) | 0.2
|
2(1/2) | 1.4142…
|
角度演算子: <number>°
この演算子は、その数に
pi/180
を掛けます。これで、度数法(60分法)による角度を弧度法に変換します。
例:
式 | 結果
|
180° | 3.1416…
|
cos(180°) | -1
|
絶対値演算子: |<number>|
この演算子はオブジェクトの絶対値を求めます。オブジェクトは、実数、複素数、ベクトルのいずれかです。
例:
式 | 結果
|
|-5| | 5
|
|(3,4)| | 5
|
|1+i| | 1.4142…
|
注意: |_|
演算子を入れ子にして使うことはできません。Cindyscriptはそれを構文エラーとみなします。入れ子にしたい場合はabs()関数を用います。
距離演算子: |<number>,<number>|
|...|
演算子を、引数2つで使うことができます。その場合、2つのオブジェクトの距離を計算します。オブジェクトは、実数、複素数、ベクトルのいずれかですが、2つとも同じ種類のものとします。
例:
式 | 結果
|
|-5,8| | 13
|
|(1,1),(4,5)| | 5
|
注意: |_|
演算子を入れ子にして使うことはできません。Cindyscriptはそれを構文エラーとみなします。入れ子にしたい場合はdist()関数を用います。
関数
次の演算子は、数(整数、実数、複素数)に適用されます。
いくつかの関数はベクトルにも適用されます。
算術関数
和: add(<expr1>,<expr2>)
差: sub(<expr1>,<expr2>)
積: mult(<expr1>,<expr2>)
商: div(<expr1>,<expr2>)
累乗: pow(<expr1>,<expr2>)
これらは、
+,
-,
*,
/と同等な、2つの数の演算をする関数です。
例:
式 | 結果
|
add(5,6) | 11
|
pow(6,2) | 36
|
mod(23,4) | 3
|
add((1,2),(3,4)) | (4,6)
|
mult(2,(3,4)) | (6,8)
|
mult((4,5),(3,4)) | 32
|
剰余: mod(<expr1>,<expr2>)
説明: mod
関数は
<expr1>
を
<expr2>
で割った余りを求めます。
標準的な関数
平方根: sqrt(<expr>)
指数関数: exp(<expr>)
自然対数: log(<expr>)
これらは、数から数への関数です。
これらの関数では複素数も使えます。
三角関数
標準的な三角関数です。
三角関数 sine: sin(<expr1>)
三角関数 cosine: cos(<expr1>)
三角関数 tangent: tan(<expr1>)
sine の逆関数: arcsin(<expr1>)
cosine の逆関数: arccos(<expr1>)
tangent の逆関数: arctan(<expr1>)
ベクトルのなす角: arctan2(<real1,real2>)
ベクトルのなす角: arctan2(<vec>)
arc
は原則として多価です。しかし、演算子は−piからpiの間の解をひとつ返します。
例:
式 | 結果
|
sin(pi) | 0
|
arccos(-1) | 3.1416…
|
arctan2(1,1) | 45°
|
arctan2(-1,-1) | -135°
|
数値関数
次の関数では、単一の数のほか、リストにも適用できます。
絶対値: abs(<expr>)
四捨五入: round(<expr>)
その数以下の最大の整数: floor(<expr>)
その数以上の最小の整数: ceil(<expr>)
複素数の実部: re(<expr>)
複素数の虚部: im(<expr>)
共役複素数: conjugate(<expr>)
複素数に対しては、
round,
floor,
ceil は実部と虚部のそれぞれに対して適用されます。
abs は、実数、複素数、ベクトルなどのノルムを計算します。他の関数はリストにも適用できます。
例:
式 | 結果
|
round(4.3) | 4
|
round([3.2,7.8,3.1+i*6.9]) | [3,8,3+i*7]
|
abs([1,3,1,2,1]) | 4
|
floor(4.8) | 4
|
乱数
次の関数は乱数を発生します。
0 から 1 までの一様乱数: random()
(0,1)正規乱数: randomnormal()
ブール値の乱数 true
または false
: randombool()
0 から <number>
までの実数の一様乱数: random(<number>)
0 から <number>
までの整数の一様乱数: randomint(<number>)
random 関数は、負の数や複素数を引数にすることもできます。例えば、
random(-5)
は
-5
から
0
までの乱数を発生します。
randomint(6+i*10)
は実部が0から6まで、虚部が0から10までの複素数をランダムに発生します。
乱数発生器の初期化: seedrandom(<number>)
疑似乱数は、常に予測不可能な新しい乱数列を発生します。なんらかの理由で、スクリプトを実行するたびに、同じ乱数列を発生させたい場合は、
seedrandom()
関数を使います。引数に与えた整数に対し、同じ乱数列が発生します。異なる引数(seed)を与えれば別の乱数列が発生します。