【云栖社区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
【云栖社区002-二分估值法】要求不用数学库,求 sqrt (2)精确到小数点后10位(Java版)的更多相关文章
- [SoapUI] 重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息
重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息 package d ...
- 云栖社区用机器人爬CSDN的文章?
这个云栖社区的文章https://yq.aliyun.com/ziliao/539322 这篇文章是我13年写的,不知道咋插入图片,见谅. 下面是我的文件记录 分享XAML图标的网站 原创 2013年 ...
- 我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
我的博客即将入驻"云栖社区",诚邀技术同仁一同入驻. 博客搬家邀请码NXLZV
- Vue.js 2 vs Vue.js 3的实现 – 云栖社区
Vue.js 2 vs Vue.js 3的实现 – 云栖社区 vue.js核心团队已经讨论过将在Vue3实现的变化.虽然API不会改变,但是数据响应机制(译者注:对数据改变的监听和通知)发生了变化.这 ...
- 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天
阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天
- 云栖社区 Tensorflow快餐教程
云栖社区 Tensorflow快餐教程(1) - 30行代码搞定手写识别:https://yq.aliyun.com/articles/582122云栖社区 Tensorflow快餐教程(2) - 标 ...
- 【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)
如题 动手之前,发现自己很擅长用C语言来写链表. 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧:毕竟,以后的若干年里都差不多要跟Java打交道了. 于是,先将Java版的链表自学 ...
- Docker:云栖社区开源论题及Spark开源论题
https://yq.aliyun.com/topic/78?spm=5176.8290451.656547.7.rMYhAF https://yq.aliyun.com/activity/155?u ...
- 阿里云栖社区dubbo 资源整理
1.apache dubbo pdf git 地址:https://github.com/dubbo/awesome-dubbo/tree/master/slides/meetup/201905%40 ...
随机推荐
- snapde的批量文件数据过滤保存功能
一.snapde基本介绍 Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏. 二.snapde批量数据筛选功能 如果想要对很多文件筛选出来 ...
- Eclipse项目上传和下载到码云上
本文将介绍如何将本地的项目提交到开源中国的码云(版本控制器)上.改教程讲解过程比较详细,跟着做实现起来很简单.由于自己本身也是一个新手,所以不做过多的解释,只是单纯的描述了该如何去做,大家一起学习共同 ...
- SQL Server 索引的最佳实践
索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其 ...
- [Docker] - 使用 Kitematic 安装 elasticsearch 失败 之解决
环境:Docker v19.03.4 + Kitematic Issue:(HTTP code 404) no such image - no such image: elasticsearch:la ...
- Node.js 开发指南-读书笔记
1. Node.js 使用了单 线程.非阻塞的事件编程模式 Node.js 最大的特点就是采用异步式 I/O 与事件驱动的架构设计.对于高并发的解决方 案,传统的架构是多线程模型,也就是为每个业务逻辑 ...
- SpringBoot配置多数据源Mysql+Sqlite
配置了一下druid的多数据源配置,尝试了很多方法,Spring boot关于对Mysql和Sqlite多数据源的配置,记录下来: 涉及技术点: Springboot + Druid + Mysq ...
- Python全栈开发相关课程
Python全栈开发 Python入门 Python安装 Pycharm安装.激活.使用 Python基础 Python语法 Python数据类型 Python进阶 面向对象 网络编程 并发编程 数据 ...
- [cf 1239 B] The World Is Just a Programming Task (Hard Version)
题意: 给你一个长度为n的括号序列,你可以交换其中的两个元素,需要使该序列的n个循环移位中合法的括号序列个数尽量多. 输出最大的答案以及交换哪两个元素能够取到这个答案. $n\leq 3\times ...
- [CF30E]Tricky and Clever Password(KMP+manacher)
首先枚举回文中心,然后显然中心两边要尽量扩展作为middle,这个用manacher实现. 然后注意到suffix的结尾位置是固定的(串尾),那么预处理出以每个位置结尾的串与原串后缀至多能匹配多长,然 ...
- HTTP响应状态
状态码分类 状态码详解 状态码 英文提示 说明 100 Continue 继续 101 Switching Protocols 切换协议.服务器根据客户端的请求切换协议.只能切换到更高级的协议,例如, ...