在程序语言设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。
不借助Math函数求开根值
1、二分迭代法求n开根后的值
思路:left=0right=nmid=(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轴交点的值一定是全部大于或者小于解的,迭代下去只会逼近解
//普通迭代法,initNum要开根的值,保留saveNum位小数,
functionsqr(initNum,saveNum){
varleftNum=0;
varrightNum=initNum;
varmiddleNum=(leftNum+rightNum)/2;
for(vari=0;i<20;i++){
varresult=middleNum*middleNum;
if(initNum===result){
middleNum=middleNum.toFixed(saveNum);
document.getElementById("result").value=middleNum;
}
elseif(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)*/
//牛顿迭代法
functionsqrt(initNum,saveNum){
//当n>=1时,从n开始迭代;当n<1时,从1开始迭代
letresult=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;
}
函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。
¥99.00
¥59.00
¥39.00