X ^ n =(X ^ n / 2)^ 2 n> 0で、nが偶数の場合
X ^ n = X *(X ^ n / 2)^ 2 n> 0で、nが奇数の場合
誰かが私にこれらの2つの式のJavaコードを教えてもらえますか?私はそれをやろうとしましたが、私の答えは常に無限大です。
これが私のコードです
コード:
import java.lang.*;
public class power4
{
double ans;
public double setpower(double x, double n) {
if (n == 0)
return 1;
else if (n % 2 == 0)
return Math.pow(setpower(x, n/2),2);
else
return x * (Math.pow(setpower(x, n/2),2));
}
}
ドライバークラス:
public class powerTester
{
public static void main(String[] args) {
power4 test4 = new power4();
System.out.print("2^0 -- ");
System.out.print(test4.setpower(2,0)+" ");
System.out.println();
System.out.print("2^1 -- ");
System.out.print(test4.setpower(2,1)+" ");
System.out.println();
System.out.print("2^2 -- ");
System.out.print(test4.setpower(2,2)+" ");
System.out.println();
System.out.print("2^3 -- ");
System.out.print(test4.setpower(2,3)+" ");
System.out.println();
System.out.print("2^4 -- ");
System.out.print(test4.setpower(2,4)+" ");
System.out.println();
System.out.print("2^5 -- ");
System.out.print(test4.setpower(2,5)+" ");
}
}
出力:
Welcome to DrJava. Working directory is C:\Users\Nisarg\Desktop
> run powerTester
2^0 -- 1.0
2^1 -- Infinity
2^2 -- Infinity
2^3 -- Infinity
2^4 -- Infinity
2^5 -- Infinity >
この式
X^n = X * ( X^ (n / 2))^2
n / 2
奇数の整数除算であることに依存しています。言い換えれば、それは必要ではありませんがn ÷ 2
、実際には(n - 1) ÷ 2
。整数でn
はdouble
ないことにより、整数除算としてではなく、除算を正確に機能させることができます。
この結果、この再帰はn / 2
、浮動小数点の精度の限界に達したときにのみ終了します。そのときまでに、何度もX
何度も乗算します。したがって、結果は非常に大きな数になります。に格納するには大きすぎdouble
ます。
これを修正するには、setpower
メソッドの最初の行を次のように変更します。
public double setpower(double x, int n)
整数除算を強制します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加