暴力求解a的开方

java本身有Math.sqrt函数来计算开方,但是我想自己编一个算法计算一个数的开方。
思路是将这个数(a)循环减去0.001,把得到的数平方,再与a比较,得到与开方比较接近的数,但是速度太慢。

package 计算;
/***
 * 精度为百万分之一;
 * 千位以内运算速度小于4秒;
 */

import java.util.Scanner;

public class 求a的开方 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入a的值:");
        int a = scanner.nextInt();
        long t1 = System.currentTimeMillis();
        double result = root1(a);
        System.out.println("答案是:" + result);
        long t2 = System.currentTimeMillis();
        System.out.println("对照是:"+(Math.sqrt(a)));
        System.out.printf("费时:%s%n", t2 - t1);
    }

    static double root1(int a) {
        double q=a/2 ;
        if (a<=5){
           q=a;
        }
        int e = 0;
        double result = 1;
        for (int w = a; w > 0; w--) {
            if (w * w == a) {
                result = w;
                e = 1;
            }
        }
        if (e == 0) {
            while (q * q > a) {
                q = q - 0.000001;
                result = q;
            }
        }
            return (result);
        }
    }

减去的数越小,精度越高,但计算量越大。

你可能感兴趣的:(java自学日记)