21xrx.com
2024-09-17 03:41:15 Tuesday
登录
文章检索 我的文章 写文章
Java代码示例:求平方根函数的实现方法
2023-06-12 05:18:48 深夜i     --     --
Java 平方根 BigDecimal

Java中提供了Math.sqrt()方法来求一个数的平方根,虽然这个方法十分简单,但在一些情况下却会出现误差,这主要是因为double类型的精度有限。

如果需要更高精度的平方根计算,可以使用BigDecimal类来实现。下面是一个示例代码片段:


import java.math.BigDecimal;

public class SqrtUtil {

  private static final int DEFAULT_SCALE = 50; // 默认计算精度

  /**

   * 计算任意精度下的平方根值

   *

   * @param input 输入值

   * @param scale 计算精度

   * @return 计算结果

   */

  public static BigDecimal sqrt(BigDecimal input, int scale) {

    BigDecimal sqrt = new BigDecimal(1);

    sqrt.setScale(scale + 3, BigDecimal.ROUND_FLOOR);

    BigDecimal store = new BigDecimal(input.toString());

    BigDecimal div = new BigDecimal(1);

    div.setScale(scale + 3, BigDecimal.ROUND_FLOOR);

    sqrt = sqrt(input, sqrt, store, div, scale);

    return sqrt.setScale(scale, BigDecimal.ROUND_HALF_UP);

  }

  private static BigDecimal sqrt(BigDecimal input, BigDecimal sqrt, BigDecimal store, BigDecimal div, int scale) {

    sqrt = sqrt.add(store.divide(sqrt, scale + 3, BigDecimal.ROUND_FLOOR)).divide(div, scale + 3, BigDecimal.ROUND_FLOOR);

    div = new BigDecimal("2").multiply(sqrt);

    store = new BigDecimal(input.toString());

    store = store.subtract(sqrt.multiply(sqrt));

    if (store.abs().compareTo(new BigDecimal("0.0")) == -1)

      return sqrt;

     else {

      return sqrt(input, sqrt, store, div, scale);

    }

  }

  /**

   * 默认计算精度下的平方根值

   *

   * @param input 输入值

   * @return 计算结果

   */

  public static BigDecimal sqrt(BigDecimal input) {

    return sqrt(input, DEFAULT_SCALE);

  }

}

使用方法:


BigDecimal input = new BigDecimal("2"); // 输入值

BigDecimal result = SqrtUtil.sqrt(input); // 计算结果

System.out.println(result.toString());  // 输出结果:1.41421356237309504880168872420969807856967187537695

在本示例中,我们使用了一个递归算法来计算平方根,计算精度可以通过scale参数指定。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复