【x的平方根 带精度的代码】

69. x 的平方根 带精度n的做法


带精度n的做法)

  • 若要求返回小于目标值精度范围内的数,sqrt1便可以实现,但是大于控制不了,目前还没想到为什么,求解决
package com.wxdedu.binarysearch_;

/**
 * 求某正整数的平方根,要求误差小于0.01
 * sqrt1 最后的值小于等于原本的值 (可以控制)
 * sqrt2 最后的值大于原本的值 (有问题,无法控制)
 */
public class Leetcode69 {
    public static double sqrt1(int target) {
        double n = 1e-2; // 精度要求
        double l = 0, r = target; // 这里如果选择target / 2,处理1和2的时候会出错
        while (l < r) {
            double mid = (l + r + n) / 2;
            if (target / mid >= mid) {
                l = mid;
            } else {
                r = mid - n;
            }
        }
        return l;
    }

    public static double sqrt2(int target) {
        double n = 1e-2; // 精度要求
        double l = 0, r = target; // 这里如果选择target / 2,处理1和2的时候会出错
        while (l < r) {
            double mid = (l + r) / 2;
            if (target / mid <= mid) {
                r = mid - n;
            } else {
                l = mid + n;
            }
//            System.out.println("l = " + l + ", r = " + r + ", mid = " + mid);
//            try {
//                //睡眠1s
//                Thread.currentThread().sleep(1000);
//            } catch (InterruptedException e) {
//                // TODO Auto-generated catch block
//                e.printStackTrace();
//            }
        }
        return l;
    }

    public static void main(String[] args) {
        int x = 9;
        double res = sqrt1(x);
        double res1 = Math.sqrt(x);
        System.out.println("sqrt1(" + x + ") = " + res + "与正确值" + res1 + "的差值为" + (res - res1));
        res = sqrt2(x);
        System.out.println("sqrt2(" + x + ") = " + res + "与正确值" + res1 + "的差值为" + (res - res1));


    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值