📄 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 + -