1

私はカスタムの BigDecimal クラスを作成しています (練習用と退屈から)、カスタムメイドの加算、減算、乗算、および除算のアルゴリズムがあり、べき乗の関数を作成したいと考えていますが、小数部分を持つ累乗であるため、 n根を含むため、冪乗する簡単な方法は思いつきません。私のクラスは、2 つの BigInteger (java.math.BigInteger クラスではありませんがString BigInteger.number、数値を含む for を含む独自のクラスでboolean BigInteger.negativeあり、明らかに、数値が負であるかどうかを示します) を持つことで機能します。そのうちの 1 つは整数です。部分 ( BigInteger BigDecimal.ipart) で、もう 1 つは分数部分 ( BigInteger BigDecimal.fpart.) です。また、 と も含まれてboolean BigDecimal.negativeおりlong BigDecimal.precission、除算の精度を定義します。私の質問は、現在のセットアップでうまく機能するアルゴリズムが存在するかどうかです。

注: 2 つの .java ファイルはここにあります. BigInteger.java & BigDecimal.java

4

1 に答える 1

2

通常、pow(a,b) は exp(b * ln(a)) として計算されます。exp() と ln() の両方が、それらの系列から特定の精度まで計算されます (例: this )。必要なのは、すでに持っている足し算、引き算、掛け算、割り算だけです。

あなたの数値は常に実有理数であるため、必要なのは整数累乗アルゴリズム、n乗根アルゴリズム、およびそれが存在することを確認するための慎重なチェックだけです(たとえば、sqrt(-1)はNaNである必要があります)。ニュートン法など、+-*/ のみを使用して n 乗根を計算するさまざまなアルゴリズムがあります。

更新: これは、整数演算のみを使用する別の n 乗根アルゴリズムです。

また、整数のべき乗を効率的に実装している場合は、答えを二分探索できます。

これらは、現在の設定に適合する、今考えられる最も簡単な方法です。

于 2013-11-27T17:43:25.703 に答える