⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 定点开方程序.开方程序精度可以达到8位十进制有效数字
💻 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 + -