Skip to main content

べき乗 (**)

2 つのオペランドを数値として解釈すると、それらのべき乗した値を算出します。

詳細

指数演算子は、右のオペランドを指数として左のオペランドをべき乗した値を算出します。

  • 0**0: ゼロのゼロ乗は 0 です。ただし、どちらかのオペランドが、IEEE 倍精度数の場合 (例えば、0**$DOUBLE(0) または $DOUBLE(0)**0)、ゼロのゼロ乗は 1 です。詳細は、"$DOUBLE 関数" を参照してください。

  • 0**n: ゼロの正数 n 乗はゼロです。0**$DOUBLE("INF") の場合も同様です。ゼロの負数乗を求めようとするとエラーが発生します。このときに生成されるエラーは、標準的な負の数を指定した場合は <ILLEGAL VALUE> エラー、$DOUBLE の負数を指定した場合は <DIVIDE> エラーです。

  • num**0: ゼロ以外の数値 (正または負) のゼロ乗は 1 です。$DOUBLE("INF")**0 の場合も同様です。

  • 1**n: 1 の任意の数値 (正、負、またはゼロ) 乗は 1 です。

  • -1**n: -1 のゼロ乗は 1、-1 の 1 乗および -1 の -1 乗は -1 です。1 より大きい指数の場合は、以下を参照してください。

  • num**n: 正数 (整数または小数) の任意の数値 (整数または小数、正または負) 乗は正数になります。

  • -num**n: 負数 (整数または小数) の偶数 (正または負) 乗は正数になります。負数 (整数または小数) の奇数 (正または負) 乗は負数になります。

  • -num**.n: 負数の小数乗を求めようとすると、<ILLEGAL VALUE> エラーが発生します。

  • $DOUBLE("INF")**n: 無限数 (正または負) の 0 乗は 1 です。無限数 (正または負) の正数 (整数、小数、または INF) 乗は INF です。無限数 (正または負) の負数 (整数、小数、または INF) 乗は 0 です。

  • $DOUBLE("NAN"): 指数演算子のどちら側の NAN であっても、他方のオペランドの値に関係なく NAN が返ります。

非常に大きな指数を指定すると、値のオーバーフローやアンダーフローが発生することがあります。

  • num**nnn: 1 より大きな正または負の数の、大きな正数乗 (9**153-9.2**152 など) を求めようとすると、<MAXNUMBER> エラーが発生します。

  • num**-nnn: 1 より大きな正または負の数の、大きな負数乗 (9**-135-9.2**-134 など) はゼロになります。

  • .num**nnn: 1 未満の正または負の数の、大きな正数乗 (.22**196-.2**184 など) はゼロになります。

  • .num**-nnn: 1 未満の正または負の数の、大きな負数乗 (.22**-196-.2**-184 など) を求めようとすると、<MAXNUMBER> エラーが発生します。

InterSystems IRIS® データ・プラットフォームの数値として使用できる最大値を超える指数を使用すると、<MAXNUMBER> エラーが発生するか、自動的に IEEE 倍精度浮動小数点数に変換されます。この自動変換は、%SYSTEM.ProcessOpens in a new tab クラスの TruncateOverflow()Opens in a new tab メソッドを使用してプロセスごとに指定するか、または Config.MiscellaneousOpens in a new tab クラスの TruncateOverflowOpens in a new tab プロパティを使用してシステム全体で指定します。詳細は、"$DOUBLE 関数" を参照してください。

以下の例は、2 つの数値リテラルをべき乗します。

 WRITE "9 ** 2 = ",9 ** 2,! // 81
 WRITE "9 ** -2 = ",9 ** -2,! // .01234567901234567901
 WRITE "9 ** 2.5 = ",9 ** 2.5,! // 242.9999999994422343

以下の例は、2 つの定義済みローカル変数をべき乗します。

 SET x = 4, y = 3
 WRITE "x ** y = ",x ** y,! // 64

以下の例は、文字列算術演算を実行します。指数演算子も、オペランドの値として先行する数値文字をすべて使用して、結果を算出します。

 WRITE "4 apples" ** "3 oranges" // 64

オペランドが先行数値文字を持たない場合、指数演算子は、その値をゼロと見なします。

以下の例は、指数を使用した数値の平方根の算出方法です。

 WRITE 256 ** .5 // 16

べき乗計算は、$ZPOWER 関数を使用しても可能です。

FeedbackOpens in a new tab