发布网友 发布时间:2022-05-20 08:18
共1个回答
热心网友 时间:2023-09-29 20:09
算法1: 假设被开放数为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)。