首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

用加减乘除求平方根啊解决办法

2012-05-28 
用加减乘除求平方根啊~~~用C写,输入求平方根的数字跟用户猜测的结果,然后用穷尽的方法算出最确切的平方根

用加减乘除求平方根啊~~~
用C写,输入求平方根的数字跟用户猜测的结果,然后用穷尽的方法算出最确切的平方根

大虾们帮帮手。。。

[解决办法]
泰勒级数,展开就可以。
[解决办法]
你把问题讲清楚点。是给一个整数,求出确切的整数平方根,还是给一个任意数,求出一个确切的小数平方根?
[解决办法]
这里有个公式:
x(n+1)=a/x(n)
当n趋向于无穷时,x(n)趋向于a的平方根
(好像是谭浩强的练习题)
[解决办法]

探讨
泰勒级数,展开就可以。

[解决办法]
x = (x + a/x) / 2.;迭代。收敛速度比泰勒快多了
[解决办法]
牛顿迭代,
[解决办法]
牛顿迭代,卡马克的方法,目前最快的开方了
[解决办法]
探讨
x = (x + a/x) / 2.;迭代。收敛速度比泰勒快多了

[解决办法]
牛顿插值 
其他也一样
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
double num,x;

puts("enter a float:");
scanf("%lf",&num);
puts("Then enter jin si ping fang gen:");
scanf("%lf",&x);
do
{
x=x-(x*x-num)/(2*x);
}while(fabs(x*x-num)>0.00001);//精确度为0.00001
printf("%lf ping fang gen:%f ,%f\n",num,x,sqrt(num));//sqrt(num)用来验证结果
system("pause");
return 0;
}
[解决办法]
牛顿迭代法: 取一个端点的切线,把切线与x轴的交战作为更好的根的逼近。
假如你要求5的平方根,可以设它的根为X,则有x的平方等于5,还可以建立一个函数如f=x^2-5.
然后对函数作泰勒展开:
将f(x)=0在初始值x0作泰勒展开:
f(x)=f(x0)+f'(x0)+(x-x0)+(f"(x0)/2)*(x-x0)^2+......
取展开式的线性部分作为f(x)约等于零的近似值,则有
f(x0)+f'(x0)(x-x0)约等于0
设f'(x0)不等于0,则
x=x0-f(x0)/f'(x0) (f'(x0)是导函数) 
将函数f=x^2-5代入上式作代数运算后,得
x=(x0+5/x0)/2 ----------这就是所要的迭代公式!
以上计算步骤同样可用于计算开三次方,开n次方!



[解决办法]
要这么复杂干嘛;楼主要的就是穷举法

给定一个整数,N,设它的平方根为k,则一定有
k<=N/2

据此,可以有这样的暴力方法

for(i=0;i</N/2;i++){
if(i*i==N)
break;
}
如果是非整数么,就用插值法吧

[解决办法]
归根结底是个数学问题~~
泰勒展开
牛顿迭代
两个最常用的办法。

再深究下去该成数学课了……
[解决办法]
C/C++ code
int main() {     int iTobeSquared = 45;    double toTry = 1;    double toTryBit = 1;    while(toTryBit > 0.000000000000001) // concise    {        while((toTry + toTryBit) * (toTry + toTryBit) <= iTobeSquared )            toTry += toTryBit;        toTryBit /= 10;    }    cout << toTry << endl;    return 0;} 

热点排行