c语言程序开平方,关于开平方的c程序

数学库也不大为什么不用呢? 你的RAM和ROM有那么小么,太小自己在片外扩充下,估计你用51的。

高数中有无穷级数展开,可以用无穷级数逼近一个函数的值。

二项展开式: (1+x)^m = 1 + m*x + [m*(m-1)/2!]*x^2 + ... + [m*(m-1)...*(m-n+1)/n!]*x^n + ...

(-1 < x < 1)

x,m取合适的值可以算任何数的任意次方,这种麦克劳林展开式取有限项后余项|R(x)| < e^|x| * |x|^(n+1)/(n+1)!

用这个余项上限可以做误差分析。

我百度了一下搜到这些算法:

算法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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值