Math.powのマニュアルコードを書き込もうとしています。また、BigDecimalデータ型を使用しているため、後で非常に小さな値で作業する予定です。Manual Math.pow JavaでBigDecimalを使用する
私はこのコードをmath.powに渡してから、私はBigDecimalに変換しようとしました。
public static double power(double base, int exponent) {
double ans = 1;
if (exponent != 0) {
int absExponent = exponent > 0 ? exponent : (-1) * exponent;
for (int i = 1; i <= absExponent; i++) {
ans *= base;
}
if (exponent < 0) {
// For negative exponent, must invert
ans = 1.0/ans;
}
} else {
// exponent is 0
ans = 1;
}
return ans;
}
}
私はBigDecimalのにダブル、int型のデータ型を変換し、あまりにもそれに応じてコードを変更しようとしましたが、どういうわけか、私は正しい結果を得ることはありません。
public static BigDecimal powerBig(BigDecimal base, BigDecimal exponent) {
BigDecimal ans= new BigDecimal(1.0);
BigDecimal k= new BigDecimal(1.0);
BigDecimal t= new BigDecimal(-1.0);
BigDecimal no= new BigDecimal(0.0);
if (exponent != no) {
BigDecimal absExponent = exponent.signum() > 0 ? exponent : t.multiply(exponent);
for (int i = 1 ; i <= absExponent.signum(); i++) {
ans =ans.multiply(base);
}
if (exponent.signum() < 0) {
// For negative exponent, must invert
ans = k.divide(ans);
}
} else {
// exponent is 0
ans = k;
}
return ans;
}
私は
BigDecimal check = new BigDecimal (4.0);
BigDecimal Euler = new BigDecimal (2.7182818);
powerBig(Euler,check);
上でそれを実行しようとしていますが、私は出力として得るすべてはtehのオイラー値です。誰かが私のコードにあるエラーで私を助けることができますか?
コードは指数タイプを変更した後
public static BigDecimal powerBig(BigDecimal base, int exponent) {
BigDecimal ans= new BigDecimal(1.0);
BigDecimal k= new BigDecimal(1.0);
//BigDecimal t= new BigDecimal(-1.0);
//BigDecimal no= new BigDecimal(0.0);
if (exponent != 0) {
int absExponent = exponent > 0 ? exponent : (-1)*exponent;
for (int i = 1 ; i <= absExponent; i++) {
ans =ans.multiply(base);
}
if (exponent < 0) {
// For negative exponent, must invert
ans = k.divide(ans);
}
} else {
// exponent is 0
ans = k;
}
return ans;
}
'指数を置くことができますので、お尻が捕虜機能を持っている= no'! - あなたはこれが何を思いますか? 'equals'でも' BigDecimal'と一緒に動作しないのですが、どうして '=='と思うでしょうか? –
私はそれをexponent.signum()> 0に変更しましたが、まだ動作していません – Saad
['BigDecimal.sigNum()'は '{-1,0,1}'を返します(http://docs.oracle.com (int i = 1; i <= absExponent.signum(); i ++) 'は何ですか?つまり、あなたのコードをデバッグしてください - 問題はすべて注意の欠如からです... –