求一个数的平方根

思想

二分法,自最开始 0 至该数的中点,比较中点乘积与该数的差值,直至差值小于指定精度。

示例

/**
 * 递归法
 *
 * @param n       数值
 * @param i       左边界
 * @param j       右边界
 * @param decimal 保留小数位
 * @return 指定精度平方根
 */
public double sqrt(int n, double i, double j, int decimal) {
    double m = (j - i) / 2 + i, threshold = Math.pow(0.1, decimal), tmp = m * m;
    if (Math.abs(tmp - n) > threshold) {
        return tmp > n ? sqrt(n, i, m, decimal) : sqrt(n, m, j, decimal);
    } else {
        return new BigDecimal(m).setScale(decimal, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}

/**
 * 循环法
 *
 * @param n       数值
 * @param decimal 保留小数位
 * @return 指定精度平方根
 */
public double sqrt(int n, int decimal) {
    double i = 0, j = n, m, threshold = Math.pow(0.1, decimal);
    while (true) {
        m = (j - i) / 2 + i;
        double tmp = m * m;
        if (Math.abs(tmp - n) > threshold) {
            if (tmp > n) {
                j = m;
            } else {
                i = m;
            }
        } else {
            return new BigDecimal(m).setScale(decimal, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 选择题部分 1.(),只有在发生短路事故时或者在负荷电流较大时,变流器中才会有足够的二次电流作为继电保护跳闸之用。...
    skystarwuwei阅读 13,462评论 0 7
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 定点小数运算 来自:http://www.eepw.com.cn/article/17893.htm 在DSP世界...
    郝宇峰阅读 9,346评论 0 2
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,416评论 0 4
  • 她可能比我大两岁吧,虽然小时候我们总在一起玩耍,可是从来没想过问她到底多大。 我读二年级的时候,她读三年级,我们在...
    如莲清凉阅读 487评论 1 1