|
■No99729 (オーガニックダーク さん) に返信 > ■No99719 (エム さん) に返信 > Function Power(a As Integer, b As Integer) As Integer
Integer が取りうる値の範囲は、 -2,147,483,648 以上 2,147,483,647 以下の範囲ですので 冪乗計算の戻り値の型が As Integer だと心許ないかも。
仮に、引数の範囲を a As Byte, b As Byte という範囲に狭めたとしても、 a = 2, b = 31 の場合(答えは 2,147,483,648) や a = 255, b = 4 の場合(答えは 4,228,250,625) で計算させると 簡単に Integer の範囲を超えてしまうわけで…。
ということで、戻り値の型をあえて Double にしてみました。
Public Function Power(a As Short, b As Short) As Double Dim p As Double = 1.0 If b > 0S Then For n = 1 To b p *= a '冪指数が正の整数の場合は、乗算を繰り返す Next ElseIf b < 0S Then For n = b To -1 p /= a '冪指数が負の整数の場合は、除算を繰り返す Next ElseIf a = 0S Then ' 0 の 0 乗を「1」として扱う処理系( a ^ 0 = 1 のルール)や ' 0 の 0 乗を「0」として扱う処理系( 0 ^ b = 0 のルール)もあるが、 ' 0 の 0 乗は本来未定義なので、ここでは NaN を返すことにする p = Double.NaN End If Return p End Function
なお、a = 0, b < 0 の場合は、正の無限大が Return されることになります。
|