?? test.c
字號:
#include <math.h>
#include <stdio.h>
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define maxnum 0x7fffffff
#define testbits 0x80000000
int ComputeSqrt(int Data,int DataLeftShift,int *OutData, int *OutDataShift)
{
int i,temp1=0,temp1shift=0,temp2=0,divshift,quotient,n=0;
if (Data==0)
{
*OutData=0;*OutDataShift=0;
return 0;
}
temp1 = testbits;
for (i=0;i<31;i++)
{
if(Data&temp1)
break;
Data=Data<<1;
DataLeftShift++;
}
temp1 = 1<<30;
temp1shift = 15;
*OutDataShift = DataLeftShift>>1;
Data = Data>>(DataLeftShift-(*OutDataShift<<1));
*OutDataShift = *OutDataShift+15;
while (1)//循環迭代時,將精度定為Q15.開方程序精度可以達到8位十進制有效數字
{
quotient=compdivide(Data,temp1,0,temp1shift,&divshift);
if (divshift>=15)
quotient = quotient>>(divshift-15);
temp2 = (temp1>>1)+(quotient>>1);
if ((abs(temp1-temp2)<=1)||(temp2==0)||(++n==20))
break;
temp1=temp2;
}
*OutData =temp2;
return 1;
}
main()
{
int i=8,qrt,shift,sh=0;
computesqrt(i,sh,&qrt,&shift);
printf("%d %f %d %d\n",i,((double)qrt/pow(2,shift)),qrt,shift);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -