/****************************************/
/*Function: 开根号处理 */
/*入口参数:被开方数,长整型 */
/*出口参数:开方结果,整型 */
/****************************************/
uint32 KitFastSqrt (uint32 val)
{
uint32 n;
uint32 i;
uint32 tmp, ttp; // 结果、循环计数
if (val == 0) return 0; // 被开方数,开方结果也为0
n = 0;
tmp = (val >> 30); // 获取最高位:B[m-1]
val <<= 2;
if (tmp > 1) { // 最高位为1
n++; // 结果当前位为1,否则为默认的0
tmp -= n;
}
for (i=15; i>0; i--) { // 求剩余的15位
n <<= 1; // 左移一位
tmp <<= 2;
tmp += (val >> 30); // 假设
ttp = n;
ttp = (ttp << 1) + 1;
val <<= 2;
if (tmp >= ttp) { // 假设成立
tmp -= ttp;
n++;
}
}
//printf("n %d\n",n);
return n;
}
C语言开根号
最新推荐文章于 2024-03-26 21:22:29 发布