C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 173 を表示中)
■99730 / )  Re[2]: For next で乗数
□投稿者/ 魔界の仮面弁士 (3367回)-(2022/05/19(Thu) 23:02:29)
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 されることになります。
返信 編集キー/


管理者用

- Child Tree -