21xrx.com
2025-03-26 05:14:46 Wednesday
文章检索 我的文章 写文章
Java代码示例:求平方根函数的实现方法
2023-06-12 05:18:48 深夜i     19     0
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参数指定。

  
  

评论区