Math 組込みオブジェクト

この章では組込み変数領域が初めから備えている Math 組込みオブジェクトを定義する。

Math は、各種数学関数をメソッドとして提供する。

この章において、e はネイピア数を、i は虚数単位を、π は円周率を表す。また、文中の #Script コードにおいて、 Math. を省略することがある (例えば abs メンバの定義に sqrt[abs2[z]] とあるのは、正確には Math.sqrt[Math.abs2[z]] を意味する)。

Float オブジェクトに関する演算

この章で定義する各関数の結果の値に Float オブジェクトが含まれるとき、そのオブジェクトの value および absolutePrecision 内部メンバの具体的な値は別項で定める通りとする (→Float オブジェクトの精度)。

以下、Number オブジェクトと、それが表す数値とを同一視する。 Real オブジェクト (が表す値) v に対して、その絶対精度を ap(v) と、その相対精度を rp(v) と書く。ただし、Integer オブジェクトおよび Rational オブジェクトが表す値の絶対精度および相対精度は無限大であると見なす。

上記の規則は NumberRealIntegerRationalFloatComplexInfinityNaN の各組込みオブジェクトの定義において準用する。

Math のプロパティ

e
ネイピア数 (自然対数の底) e = 2.718281828… の値を表す Float オブジェクト。このオブジェクトの 表す値の絶対精度は、実際にこのプロパティに対して get-property を行ったときの実行コンテクストのデフォルトの精度に従う。(よって、このプロパティの値は不変ではない)
pi
円周率 π = 3.14159265… の値を表す Float オブジェクト。このオブジェクトの 表す値の絶対精度は、実際にこのプロパティに対して get-property を行ったときの実行コンテクストのデフォルトの精度に従う。(よって、このプロパティの値は不変ではない)
abs メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$abs[] }
abs2 メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$abs2[] }
re メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$re[] }
im メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$im[] }
conj メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$conj[] }
arg メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$arg[] }
sign メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$sign[] }
exp メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$exp[] }
log メソッド
1-ary メソッド。このメソッドを呼出すと次の動作を行う:
  1. 引数が一つのオブジェクト v ならば、式 v.Math$log[] の評価と同様にして引数オブジェクトの Math$log メソッドを引数無しで呼出し、その結果を返す。
  2. 引数が二つの Integer オブジェクトまたは Rational オブジェクト a, b で、ab の値がどちらも正であり、式 ae = b を満たす有理数 e がちょうど一つ存在するならば、[[その有理数 e を表す Rational オブジェクト]] を返す。ただし、e が整数ならば、Rational オブジェクトではなく Integer オブジェクトを返しても良い。特に、ab が共に Integer オブジェクトであってかつ e が整数ならば、 必ず Integer オブジェクトを返さなければならない。
  3. 引数が二つの Number オブジェクト a, b で、前項に当てはまらない場合は、log[b] / log[a] の結果を返す。ただし、ab の一方が Complex オブジェクトでもう一方が Real オブジェクトならば、Real オブジェクトを Complex オブジェクトに拡大変換してから計算を行う。
  4. その他の引数に関する動作は規定しない。
log10 メソッド
1-ary メソッド。このメソッドを呼出すと次の動作を行う:
  1. 渡された引数が一つの Number オブジェクト z ならば、log[10, z] の結果を返す。
  2. その他の引数に関する動作は規定しない。
sqrt メソッド
1-ary メソッド。このメソッドを呼出すと次の動作を行う:
  1. 渡された引数が一つの Number オブジェクト z ならば、z ^ /2 の結果を返す。(→冪算)
  2. その他の引数に関する動作は規定しない。
cbrt メソッド
1-ary メソッド。このメソッドを呼出すと次の動作を行う:
  1. 渡された引数が一つの Number オブジェクト z ならば、z ^ /3 の結果を返す。(→冪算)
  2. その他の引数に関する動作は規定しない。
sin メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$sin[] }
cos メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$cos[] }
tan メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$tan[] }
asin メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$asin[] }
acos メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$acos[] }
atan メソッド
1-ary メソッド。このメソッドを呼出すと次の動作を行う:
  1. 引数が一つのオブジェクト v ならば、式 v.Math$atan[] の評価と同様にして引数オブジェクトの Math$atan メソッドを引数無しで呼出し、その結果を返す。
  2. 引数が二つの Real オブジェクト x, y ならば、次の動作を行う:
    1. 実数の比較によって x = 0 ならば、次の動作を行う:
      1. 実数の比較によって y = 0 ならば、[[NaN オブジェクト]] を返す。
      2. y > 0 ならば [[π / 2 の値を表す Float オブジェクト]] を、y < 0 ならば [[−π / 2 の値を表す Float オブジェクト]] を、返す。ただし、結果の絶対精度は ap(x) + log10|y| とする。
    2. atan[y / x] の結果を v とする。
    3. x > 0 ならば、v を返す。
    4. 実数の比較によって y ≥ 0 ならば [[v + π の値を表す Float オブジェクト]] を、さもなくば [[vπ の値を表す Float オブジェクト]] を返す。結果の絶対精度は v のそれに一致するものとする。
  3. 引数が二つのオブジェクトで、どちらも Number オブジェクトならば、下表に定める結果を返す。
    無限大の atan
    第一引数第二引数結果
    +∞Realatan[1, 0] の結果
    −∞Realatan[-1, 0] の結果
    Real+∞atan[0, 1] の結果
    Real−∞atan[0, -1] の結果
    +∞/−∞+∞/−∞NaN
    NaN任意NaN
    任意NaNNaN
    その他規定しない
    ただし、表に含まれる記号の意味は数値計算の省略記法を準用する。
  4. その他の引数に関する動作は規定しない。
sinh メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$sinh[] }
cosh メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$cosh[] }
tanh メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$tanh[] }
asinh メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$asinh[] }
acosh メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$acosh[] }
atanh メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$atanh[] }
sum メソッド
このメソッドを呼出すと次の動作を行う:
  1. 渡された引数の個数を n とし、引数を順に v1, v2, …, vn とする。
  2. n = 0 ならば、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. 全ての引数オブジェクトが加法に関する半群の公理をみたす何らかの集合に属していると見なして、式 v1 + v2 + … + vn を評価し、その結果を返す。
prod メソッド
このメソッドを呼出すと次の動作を行う:
  1. 渡された引数の個数を n とし、引数を順に v1, v2, …, vn とする。
  2. n = 0 ならば、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. 全ての引数オブジェクトが乗法に関する半群の公理をみたす何らかの集合に属していると見なして、式 v1 * v2 * … * vn を評価し、その結果を返す。
and メソッド
このメソッドを呼出すと次の動作を行う:
  1. 渡された引数の個数を n とし、引数を順に v1, v2, …, vn とする。
  2. n = 0 ならば、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. v1and メソッドを、 v1 を @this 値とし、 v2, v3, …, vn を引数として関数として呼出し、 その結果を返す。ただし、v1and メソッドを持たなければ、エラーとする。
or メソッド
このメソッドを呼出すと次の動作を行う:
  1. 渡された引数の個数を n とし、引数を順に v1, v2, …, vn とする。
  2. n = 0 ならば、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. v1or メソッドを、 v1 を @this 値とし、 v2, v3, …, vn を引数として関数として呼出し、 その結果を返す。ただし、v1or メソッドを持たなければ、エラーとする。
xor メソッド
このメソッドを呼出すと次の動作を行う:
  1. 渡された引数の個数を n とし、引数を順に v1, v2, …, vn とする。
  2. n = 0 ならば、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. v1xor メソッドを、 v1 を @this 値とし、 v2, v3, …, vn を引数として関数として呼出し、 その結果を返す。ただし、v1xor メソッドを持たなければ、エラーとする。
not メソッド
このメソッドを呼出すと次の動作を行う:
  1. 渡された引数の個数を n とし、引数を順に v1, v2, …, vn とする。
  2. n = 0 ならば、新しい NumberOfArgumentsError のインスタンスを投げる。
  3. v1not メソッドを、 v1 を @this 値とし、 v2, v3, …, vn を引数として関数として呼出し、 その結果を返す。ただし、v1not メソッドを持たなければ、エラーとする。
floor メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$floor[] }
ceil メソッド
次の関数生成式を評価して得られるような関数オブジェクト: @[x] { x.Math$ceil[] }

Math の内部メンバ

$prototype
Object.prototype

Math の関数としての呼出し

Math は、関数として呼出し可能ではない。

© 2006-2007 Magicant