在 Java 中使用 BigDecimal 手动 Math.pow

我正在尝试为 Math.pow 编写手动代码,并且也使用 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;
}
}

我将 double 和 int 数据类型转换为 BigDecimal 并尝试相应地更改代码,但不知何故我没有得到正确的结果。

 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);

但我作为输出得到的只是欧拉值。有人可以帮助我解决代码中的错误吗?

将指数类型更改为 int 后,代码现在运行

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;
}
分数

您的问题是 BigDecimal.sigNum() 返回 1、0 或 -1,如果数字为正、零或负,则 absExponent.sigNum() 将始终返回 1,您的循环将在第一次执行时结束

此版本适用于 euler 示例

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);
        while (absExponent.signum() > 0){
            ans =ans.multiply(base);
            absExponent = absExponent.subtract(BigDecimal.ONE);
        }

        if (exponent.signum() < 0) {
            // For negative exponent, must invert
            ans = k.divide(ans);
        }
    } else {
        // exponent is 0
        ans = k;
    }

    return ans;
}

BigDecimal 类也有一个 pow 函数,所以如果你想保持简单,你可以把

 BigDecimal Euler = new BigDecimal (2.7182818);
 Euler.pow(4);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在math.pow中使用递归来计算Java的功效

来自分类Dev

在Java中使用Math.pow确定立方体的表面积以及“跳过”的困难

来自分类Dev

如何正确使用math.pow java函数?

来自分类Dev

如何正确使用math.pow java函数?

来自分类Dev

Java Math.abs与Math.pow

来自分类Dev

Java到Swift-如何在Xcode 6中使用math.pow和math.exp

来自分类Dev

如何使用 Java Config 手动添加 Spring CacheInterceptor?

来自分类Dev

Java - 如何使用密码手动加密数据?

来自分类Dev

使用Math.pow()函数

来自分类Dev

使用Math.Pow函数

来自分类Dev

okhttp 3:如何解压gzip /放气反应中使用Java /手动的Android

来自分类Dev

如何在JSP中使用Math.pow?

来自分类Dev

在Microsoft Solver Foundation中使用Math.Pow

来自分类Dev

Java Math.pow无法正常工作

来自分类Dev

Java的Math.pow返回1错误

来自分类Dev

Java:Math.pow()返回零

来自分类Dev

Java Math.pow无法正常工作

来自分类Dev

java.math.BigDecimal的划分不准确

来自分类Dev

不确定如何使用Math.pow()

来自分类Dev

不确定如何使用Math.pow()

来自分类Dev

使用 Math.Pow 计算每月贷款

来自分类Dev

如何使用 Math.pow 计算 bmi

来自分类Dev

Java Math.pow(x,2.0)与Math.pow(x,2.0000001)性能

来自分类Dev

如何使用Math.PI和Math.pow

来自分类Dev

从Java手动使用@Transactional方法创建Spring @Service实例

来自分类Dev

Rails最佳实践:手动添加Java脚本还是使用gem?

来自分类Dev

在手动加载的库上使用预链接?(例如Java本机库)

来自分类Dev

从Java手动使用@Transactional方法创建Spring @Service实例

来自分类Dev

如何使用Java手动展平Elasticsearch嵌套的JSON文档?

Related 相关文章

热门标签

归档