不借助Math函数求开根值
思路: left=0 right=n mid=(left+right)/2
比较mid^2与n大小
=输出;
>改变范围,right=mid,mid重新计算;
<改变范围,left=mid,mid重新计算;
如此循环,不过只能是逼近,并不能完全正确,常识
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>
<label>请输入</label>
<input type="text" placeholder="开根值" id="inuptNum">
</div>
<div>
<label>保留</label>
<input type="text" placeholder="几位小数" id="saveNum">
</div>
<div>
<label>结果</label>
<input type="text" id="result">
</div>
<button type="button" onclick="sqrt(parseInt(document.getElementById('inuptNum').value),parseInt(document.getElementById('saveNum').value))">计算</button>
</body>
</html>
有一个数组,我们需要通过js对数组的元素进行随机排序,然后输出,这其实就是洗牌算法,首页需要从元素中随机取一个和第一元进行交换,然后依次类推,直到最后一个元素。
程序员必须知道的10大算法:快速排序算法、堆排序算法、归并排序、二分查找算法、BFPRT(线性查找算法)、DFS(深度优先搜索)、BFS(广度优先搜索)、Dijkstra算法、动态规划算法、朴素贝叶斯分类算法
使用原生js将一维数组中,包含连续的数字分成一个二维数组,这篇文章分2种情况介绍如何实现?1、过滤单个数字;2、包含单个数字。
给定一个无序的整数序列, 找最长的连续数字序列。例如:给定[100, 4, 200, 1, 3, 2],最长的连续数字序列是[1, 2, 3, 4]。此方法不会改变传入的数组,会返回一个包含最大序列的新数组。
racking.js 是一个独立的JavaScript库,实现多人同时检测人脸并将区域限定范围内的人脸标识出来,并保存为图片格式,跟踪的数据既可以是颜色,也可以是人,也就是说我们可以通过检测到某特定颜色,或者检测一个人体/脸的出现与移动,来触发JavaScript 事件。
JS常见算法题目:xiaoshuo-ss-sfff-fe 变为驼峰xiaoshuoSsSfffFe、数组去重、统计字符串中出现最多的字母、字符串反序、深拷贝、合并多个有序数组、约瑟夫环问题
这篇文章主要是针对一种最常见的非对称加密算法——RSA算法进行讲解。其实也就是对私钥和公钥产生的一种方式进行描述,RSA算法的核心就是欧拉定理,根据它我们才能得到私钥,从而保证整个通信的安全。
PageRank,网页排名,又称网页级别、Google左侧排名或佩奇排名,是一种由 根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一,以Google公司创办人拉里·佩奇(Larry Page)之姓来命名。
什么是回文字符串?即字符串从前往后读和从后往前读字符顺序是一致的。例如:字符串aba,从前往后读是a-b-a;从后往前读也是a-b-a
将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 ;当尾数为0时候需要进行舍去。解法:转字符串 再转数组进行操作,看到有人用四则运算+遍历反转整数。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!