\setcounter{section}{19} >
算術演算子及び論理演算子
この節を先頭とする三つの節では、ページ要素及びそれに関連するオブジェクトの操作又は作画に直接関係しない演算子群について規定する。
これには、次のものが含まれる。
-
算術演算子及び論理演算子
-
オペランドスタック上にある値を操作するための演算子
-
辞書、オクテット列及びベクタを操作するための演算子
-
実行制御及び手続きの操作のための演算子
-
仮想機械の状態を退避及び回復するための演算子
-
オブジェクトの型変換及び資源操作のための演算子
これらの演算子及びその意味に関する規定は、演算子を解釈した結果として内容例外を発生させうる条件についての規定を含む。
.
]]>
内容例外及び例外処理については、で定義する。
これら演算子固有の例外に加えて、ほとんどどの演算子の解釈辞にも発生しうる共通的な例外がある。
.
]]>
これらの共通例外及びその意味については、で述べる。
SPDLは、得られるべき効果だけを規定し、その結果を得るために必要な機構は規定しない、ということを強調しておく。
本節の定義では、説明の便宜上、特定のオペランドスタック操作、及び特定の順序でのオブジェクト操作を要求しているが、実装においては、与えられた演算子に対して要求される効果を異なった方法で達成してもかまわない。
次に述べる算術演算子群は、IEEE 754における2進の浮動小数点算術規
則に従ってその演算を実行する。この算術規則は、IEEE 754 で規定さ
れているトラップのようなオプションにおいては無指定時値を使用する。
この節における規定では、2個以上の数型のオペランドをもつ演算子は、その演算子の範囲内で、整数及び実数のどちらも受け入れるものとする。
1個以上のオペランドが整数で、あるオペランドが実数であるときは、演算を実行するために、整数のオペランドは、実数へ変換される。
AbsoluteValue>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
ここで、
オペランド
Add>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、z = x + yとする。
オペランドが共に整数型の値である場合、
ArcTangent>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、y / xであり、0度から360度の範囲内にある角度とする。
.
]]>
オペランドの符号によって、結果の象限は、のとおり定まる。
xy結果
正
正
第1象限
正
負
第4象限
負
正
第2象限
負
負
第3象限
正
0
0.0
負
0
180.0
0
正
90.0
0
負
270.0
0
0
RaiseError
shall be invoked with UndefinedResult as its operand.
]]>
RaiseError> を実行する。
And>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、両方のオペランドは、同一の型でなければならない。
オペランドが共に論理型の場合、
オペランドが共に整数型の場合、
Ceiling>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
ここで、
オペランドが整数型の場合、
オペランドが実数型の場合、
Cosine>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
ここで、
Divide>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、RaiseError
shall be invoked with UndefinedResult as its operand.
]]>
RaiseErrorを実行する。
Equal>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、
この場合、整数型のオペランドは実数型へ変換され、2個のオペランドは実数型の値として比較される。
識別子型とオクテット列参照型の値は、比較される。この場合は、識別子型の値に対応するオクテット列と参照されるオクテット列は、単なるオクテットの並びとして比較してもよい。
値に関連づけられた属性()は、値の等価性の判定には関係しない。
Exponentiate>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、RaiseError
shall be invoked with UndefinedResult as its operand.
]]>
RaiseErrorを実行する。
False>演算子は、オペランドをとらず、次に示す1個の結果を返す。
<false:
ここで、falseは、論理値の偽とする。
Floor>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
ここで、
オペランドが整数型の場合は、
オペランドが実数型の場合は、
GreaterOrEqual>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
Not>}.
]]>
ここで、LessThan> Not>}の結果とする。
GreaterThan>
GreaterThan> operator takes two operands,
]]>
GreaterThan>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
y, and z shall be false otherwise.
]]>
ここで、x > yの場合は真、その他の場合は偽とする。
IntegerDivide>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
Divide> Truncate>}.
]]>
ここで、Divide> Truncate>}の結果とする。
RaiseError shall be invoked with UndefinedResult as its operand.
]]>
RaiseErrorを実行する。
LessOrEqual>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
GreaterThan> Not>}.
]]>
ここで、GreaterThan> Not>}の結果とする。
LessThan>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、x < yの場合は真、その他の場合は偽とする。
Logarithm>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
ここで、
LogicalShift>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、
シフトの結果生じたビットの値は、0とする。
Multiply>演算子は、次に示す2個のオペランドをとる。
<<
そして、次に示す1個の結果を返す。
<
ここで、
オペランドが共に整数型の値である場合、
NaturalLogarithm>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
ここで、
Negate>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
ここで、y = -x>とする。
Not>演算子は、次に示す1個のオペランドをとる。
<
そして、次に示す1個の結果を返す。
<
オペランドが論理型のとき、
オペランドが整数型のとき、
NotEqual>演算子は、次に示す2個のオペランドをとる。
<<