原生js数值开根算法
不借助Math函数求开根值
1、二分迭代法求n开根后的值
思路: left=0 right=n mid=(left+right)/2
比较mid^2与n大小
=输出;
>改变范围,right=mid,mid重新计算;
<改变范围,left=mid,mid重新计算;
如此循环,不过只能是逼近,并不能完全正确,常识
2、牛顿迭代法求n开根后的值
1)理论上来讲,开根后的值为x,那么x^2=n,即可以将其转换为数学问题
2)令y=x^2-n,那么只需要求方程与x轴正方向的焦点就可以得出想要的结果
3)我们作x=a与方程交于(a^2-n),求得他的切线与x轴的交点(a,a^2-n),a一般从n开始
4)然后求得该点切线与x轴交点,此处需要了解切线公式:记曲线为y=f(x),则在点(a,f(a))处的切线方程为:y=f'(a)(x-a)+f(a),
5)重复步骤3,令x=步骤4的x值,如此循环即可逼近
有点绕,简单来讲就是设开根后的值为x,然后转换成方程,通过求切线与x轴交点值不断逼近方程的解,一般从x=n与方程交点的切线开始求,原因嘛:求根肯定是小于等于它自身的值,那么从n开始就没有疑问了,而且方程是曲线,方程一侧所有点切线与x轴交点的值一定是全部大于或者小于解的,迭代下去只会逼近解
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
// 普通迭代法,initNum要开根的值 , 保留saveNum位小数,
function sqr(initNum,saveNum){
var leftNum=0;
var rightNum=initNum;
var middleNum=(leftNum+rightNum)/2;
for(var i=0;i<20;i++){
var result=middleNum*middleNum;
if(initNum===result){
middleNum=middleNum.toFixed(saveNum);
document.getElementById("result").value=middleNum;
}
else if (initNum>result){
leftNum=middleNum;
middleNum=(leftNum+rightNum)/2;
}
else{
rightNum=middleNum;
middleNum=(leftNum+rightNum)/2;
}
}
middleNum=middleNum.toFixed(saveNum);
document.getElementById("result").value=middleNum;
} /*记曲线为y=f(x),则在点(a,f(a))处的切线方程为:y=f'(a)(x-a)+f(a)*/
//牛顿迭代法
function sqrt(initNum,saveNum) {
//当n>=1时,从n开始迭代;当n<1时,从1开始迭代
let result = initNum >= 1 ? initNum : 1;
// 当迭代值^2与原值之差满足一个很小的差值时,即可认为逼近开根值
while(result * result - initNum > 1e-8)
result = 0.5 * (result + initNum / result);
result=result.toFixed(saveNum);
document.getElementById("result").value=result;
}
</script>
</head>
<body>
<div class="mui-input-row">
<label>请输入</label>
<input type="text" placeholder="开根值" id="inuptNum">
</div> <div class="mui-input-row">
<label>保留</label>
<input type="text" placeholder="几位小数" id="saveNum">
</div> <div class="mui-input-row">
<label>结果</label>
<input type="text" id="result">
</div>
<button type="button" class="mui-btn mui-btn-blue mui-btn-block" onclick="sqrt(parseInt(document.getElementById('inuptNum').value),parseInt(document.getElementById('saveNum').value))">计算</button> </body>
</html>
原生js数值开根算法的更多相关文章
- JS 九宫格算法 用原生js实现
九宫格算法核心: 利用控件索引index计算出控件所在的行数和列数: 利用控件计算出left距离: 利用控件计算出top距离: 写特效时需要用到定位 公式: 行 row=parseInt(i/cols ...
- 原生js动画效果(源码解析)
在做页面中,多数情况下都会遇到页面上做动画效果,大部分都是用jquery来实现动画,今天正好看到一篇原生js实现动画效果的代码,特分享在此. 原文地址:http://www.it165.net/pro ...
- 抛开jQuery,拾起原生JS的DOM操作
常用的JS-DOM操作与jQuery的对比 jQuery用多了,还是需要来熟练熟练原生JS的操作,不然写JS都快离不开jQuery了 目录 1. 获取DOM 2. 创建DOM 3. 添加DOM 4. ...
- 原生js焦点轮播图
原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...
- 原生JS 表单提交验证器
转载:http://www.cnblogs.com/sicd/p/4613628.html 一.前言 最近在开发一个新项目,需要做登陆等一系列的表单提交页面.在经过“缜密”的讨论后,我们决定 不用外部 ...
- 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别
一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...
- 原生js获取鼠标坐标方法全面讲解-zmq
原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y 一.关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种:eve ...
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- 原生JS实现分页效果1.0
不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...
随机推荐
- vmware虚拟机安装T6客户端
1.虚拟机安装T6 经过测试,vmware 里系统装T6 网络适配器必须使用桥接,nat模式是无法连接数据库的
- 豆瓣读书isbn 查询
最近学习微信小程序,做一个类似"书库"的小demo,大致流程使用摄像头获取书本后面的isbn,通过豆瓣读书API得到书本介绍.豆瓣评分.图书评论等信息,然鹅https://api. ...
- JAVA类与类之间的关系及代码示例
参考链接:https://blog.csdn.net/wq6ylg08/article/details/81092056
- IE、chrome驱动下载地址
http://selenium-release.storage.googleapis.com/index.html IE驱动https://sites.google.com/a/chromium.or ...
- mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...
- contest3 CF994 div2 ooxxx? oooox? ooooo?
题意 div2 C (x)(o) 在一个平面上, 给一个水平的正方形和一个\(45^.斜\)的正方形 求是否相交(共点也算), 坐标正负\(100\)以内 div2 D (x)(o) \(A,B\)两 ...
- 《Machine Learning - 李宏毅》视频笔记(完结)
https://www.youtube.com/watch?v=CXgbekl66jc&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49 https://www. ...
- CSS 分割线
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- html 指定页面字符集的两种方式
1.html指定页面字符集的两种方式 方式一: <meta charset="utf-8"> 方式二: <meta http-equiv="Cont ...
- MySql查询数据令某字段显示固定值
我们用SQL查询数据时后,基于某些原因不想看到某字段的值,比如密码,我们可以通过创建视图,忽略某一字段的值. 同时我们也可以直接通过SQL语句来让其显示某个固定值: (1)一般查询语句: SELECT ...