zoukankan      html  css  js  c++  java
  • 【云栖社区002-二分估值法】要求不用数学库,求 sqrt (2)精确到小数点后10位(Java版)

    如题

    • 初步审题的时候,想到的是暴力搜索:初步设置一个合法的种子,依次按照1e-2,1e-3,1e-4,1e-5,1e-6 , 1e-7...暴力搜索,额,就是太麻烦了。

    打比赛搜索写多了,一看见题目就想到搜索。。。

    • 细想了一下,进行优化,二分估值法,貌似很合适.
    • 试了试,又调了数学库求值开根号2 ,没问题。

    代码

    package com.szs;
    /**
     * @description 要求不用数学库,求 sqrt (2)精确到小数点后 10位
     * @author Administrator
     */
    public class Main {
    	public static void main(String[] args) {	
    		//手写二分估值
    		System.out.println(myCalculate(1.4,1.4,1.5));
    		//调用函数输出
    		System.out.println("----------sqrt= "+Math.sqrt(2.0));
    	}
    	//根号2约等于 1.414
    	private static double myCalculate(double ans,double low,double high) {
    		double mid = 0;
    		// 二分法,结束条件:差值小于等于1e-10即可
    		while(high-low>1e-10){
    			
    			 mid = (high+low)/2.0;
    			System.out.println("-----------mid= "+mid+"  mid*mid= "+mid*mid);
    			//二分,逐步向中间值收拢
    			if(mid*mid <= 2.0){
    				low=mid;
    			}
    			else{
    				high=mid;
    			}
    			
    		}
    		
    		return mid;
    	}
    	
    }
    
    

    测试输出结果

    -----------mid= 1.45  mid*mid= 2.1025
    -----------mid= 1.4249999999999998  mid*mid= 2.0306249999999997
    -----------mid= 1.4124999999999999  mid*mid= 1.9951562499999995
    -----------mid= 1.4187499999999997  mid*mid= 2.0128515624999994
    -----------mid= 1.415625  mid*mid= 2.0039941406249997
    -----------mid= 1.4140625  mid*mid= 1.99957275390625
    -----------mid= 1.41484375  mid*mid= 2.0017828369140624
    -----------mid= 1.414453125  mid*mid= 2.0006776428222657
    -----------mid= 1.4142578125  mid*mid= 2.0001251602172854
    -----------mid= 1.41416015625  mid*mid= 1.999848947525024
    -----------mid= 1.414208984375  mid*mid= 1.9999870514869693
    -----------mid= 1.4142333984375002  mid*mid= 2.000056105256081
    -----------mid= 1.4142211914062501  mid*mid= 2.0000215782225137
    -----------mid= 1.414215087890625  mid*mid= 2.000004314817488
    -----------mid= 1.4142120361328125  mid*mid= 1.9999956831429155
    -----------mid= 1.4142135620117187  mid*mid= 1.9999999989778732
    -----------mid= 1.4142143249511718  mid*mid= 2.0000021568970987
    -----------mid= 1.4142139434814451  mid*mid= 2.0000010779373403
    -----------mid= 1.414213752746582  mid*mid= 2.00000053845757
    -----------mid= 1.4142136573791504  mid*mid= 2.000000268717713
    -----------mid= 1.4142136096954345  mid*mid= 2.0000001338477906
    -----------mid= 1.4142135858535765  mid*mid= 2.0000000664128312
    -----------mid= 1.4142135739326476  mid*mid= 2.000000032695352
    -----------mid= 1.4142135679721832  mid*mid= 2.000000015836613
    -----------mid= 1.414213564991951  mid*mid= 2.0000000074072433
    -----------mid= 1.4142135635018347  mid*mid= 2.0000000031925578
    -----------mid= 1.4142135627567767  mid*mid= 2.0000000010852155
    -----------mid= 1.4142135623842478  mid*mid= 2.0000000000315445
    -----------mid= 1.4142135621979832  mid*mid= 1.9999999995047089
    -----------mid= 1.4142135622911156  mid*mid= 1.999999999768127
    1.4142135622911156
    ----调用数学库计算-----sqrt2= 1.4142135623730951
    
    
  • 相关阅读:
    uva 1510
    ADN中国团队參加微软的Kinect全国大赛获得三等奖
    在 window7 window8下公布webService注意问题
    html5调用手机摄像头,实现拍照上传功能
    4、深入理解Bean
    恶补jquery(四)jquery中事件--冒泡
    html5css3杂记
    Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试。
    boost 的函数式编程库 Phoenix入门学习
    information_schema模式表介绍 processlist
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/11052672.html
Copyright © 2011-2022 走看看