忽然忘了怎么算了...
參考答案:也可以用这种算法:
假设被开放数为a,如果用sqrt(a)表示根号a 那么((sqrt(x)-sqrt(a/x))^2=0的根就是sqrt(a)
变形得
sqrt(a)=(x+a/x)/2
所以你只需设置一个约等于(x+a/x)/2的初始值,代入上面公式,可以得到一个更加近似的值,再将它代入,就得到一个更加精确的值……依此方法,最后得到一个足够精度的(x+a/x)/2的值。
如:计算sqrt(5)
设初值为2
1)sqrt(5)=(2+5/2)/2=2.25
2)sqrt(5)=(2.25+5/2.25)/2=2.236111
3)sqrt(5)=(2.236111+5/2.236111)/2=2.236068
这三步所得的结果和sqrt(5)相差已经小于0.001
或者可以用二分法:
设f(x)=x^2-a
那么sqrt(a)就是f(x)=0的根。
你可以先找两个正值m,n使f(m)<0,f(n)>0
根据函数的单调性,sqrt(a)就在区间(m,n)间。
然后计算(m+n)/2,计算f((m+n)/2),如果它大于零,那么sqrt(a)就在区间(m,(m+n)/2)之间。
小于零,就在((m+n)/2,n)之间,如果等于零,那么(m+n)/2当然就是sqrt(a)。这样重复几次,你可以把sqrt(a)存在的范围一步步缩小,在最后足够精确的区间内随便取一个值,它就约等于sqrt(a)。