正文

不用函数的开根号计算2010-05-12 11:15:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/miaowei/51087.html

分享到:

在很多特定场合,一些硬件可能不允许使用一些高等计算函数,如开根号,幂计算等。这时候就要自己写这些函数。一般都是用一些逼近方法来求取一个逼近值代替。下面就是两种自己写的求开根号的方法。

 

方法1 :

short HWR_sqrt_16(unsigned short M)
{
    short N, i;
    short tmp, ttp;
    if (M == 0)         return 0;
 else if (M < 4)  return 1;
 else if (M < 9)  return 2;
 else if (M < 16) return 3;
 else if (M < 25) return 4;
 else if (M < 36) return 5;
 else {
     N = 0;
  tmp = (M >> 14);
     M <<= 2;
  if (tmp > 1){
      N ++;
   /* tmp -= N; */
   tmp = tmp - N;
     }
  for (i=7; i>0; i--){
      N <<= 1;
   tmp <<= 2;
         tmp += (M >> 14);
         ttp = N;
      ttp = (ttp<<1)+1;
   M <<= 2;
   if (tmp >= ttp){
       /* tmp -= ttp;*/
       tmp =tmp - ttp;
    N ++;
         }
  }
     return N;
 }
}

 

方法二:

#include<stdio.h>
#include<stdlib.h>
float sqrt_fun(float inNum)
{
float x, gap,term=0.0000001;
for(x=1;x*x<=inNum;x++);
gap=x*x-inNum;
while(gap>=term)
{
x=(gap+2*inNum)/(2*x);//牛頓法
gap=x*x-inNum;
}
return x;
}
void main(){
float a,b;
printf("請輸入:");
scanf("%f",&a);
b = sqrt_fun( a );
printf("%f\n",b);
}

希望大家能够将自己写的其他的一些数学函数程序能共享出来,以方便大家使用。

阅读(6514) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册