原生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 ...
随机推荐
- HDU 1240 Asteroids! 题解
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- MicroK8s及KubeFlow安装文档
安装简单的k8s大约有三种思路:minikube,microk8s,kubeadm.minikube 虽然是官方出品,但主要还是基于虚拟机做的设计.在 Linux 生产环境下,microk8s 可能是 ...
- Iconfont技术
什么是 IconFont 顾名思义,IconFont 就是字体图标.严格地说,就是一种字体,但是,它们不包含字母或数字,而是包含符号和字形.您可以使用 CSS 设置样式,就像设置常规文本一样,这使得 ...
- python移动目录下所有子目录文件到新的总目录
python移动目录下所有子目录文件到新的总目录 import os import shutil def file(p): p=p z=os.listdir(p) for i ...
- ReSharper安装
ReSharper是一个JetBrains公司出品的著名的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.它包括一系列丰富的能大大增加C#和Visual Ba ...
- JMeter基础【第二篇】JMeter5.1介绍及脚本录制
测试计划:被测项目 线程组:测试场景 取样器:被测接口 添加HTTP代理服务器和线程组,默认端口是8888 排除模式可以设置过滤 启动 点击[OK] IE浏览器设置代理 IE浏览器访问百度首页,搜索“ ...
- RMP和YUM软件安装
1.卸载RPM包 rpm -e rpm包的名称 2.安装rpm包 rmp -ivh xxx.rpm 3.查询yum服务器是否有需要安装的软件 yum list|grep xxx软件列表 4.yum安装 ...
- Jmeter函数助手—自带方法
1.${__time()}---->当前时间,一串数字格式 2.${__time(yyyy-MM-dd)}----->当前日期,年-月-日格式 3.${__time(yyyy-MM-dd ...
- EXCEPTION_HIJACK(0xe0434f4e)异常的抛出过程
样例工程 在VS2013里新建一个C#控制台工程,写下如下代码: using System; using System.Collections.Generic; using System.Linq; ...
- Layui 关闭当前标签页
parent.layui.admin.events.closeThisTabs();