美文网首页
求一个数的平方根

求一个数的平方根

作者: 叫我宫城大人 | 来源:发表于2019-05-02 00:21 被阅读0次

    思想

    二分法,自最开始 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();
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:求一个数的平方根

          本文链接:https://www.haomeiwen.com/subject/nmygnqtx.html