C语言中32位数据平方后开方的程序

uint32_t sqrt_32(uint32_t M)
{

uint32_t N, i;
uint32_t tmp, ttp;

if (M == 0)
{
return 0;
}

N = 0;
tmp = (M >> 30);
M <<= 2;

if(tmp > 1)
{
N++;
tmp -= N;
}

for (i = 15; i > 0; i--)
{
N <<= 1;
tmp <<= 2;
tmp += (M >> 30);

ttp = N;
ttp = (ttp << 1) + 1;

M <<= 2;
if (tmp >= ttp)
{
tmp -= ttp;
N++;
}
}

return N;
}

//H是64位整数的高32位,L是64位整数的低32位
uint32_t sqrt_64(uint32_t h, uint32_t l)
{
uint32_t N, i;
uint32_t tmp, ttp;

if (h == 0)
{
return sqrt_32(l);
}
else
{
N = 0;
tmp = (h >> 30);
h <<= 2;

if (tmp > 1)
{
N++;
tmp -= N;
}

for (i = 15; i > 0; i--)
{
N <<= 1;
tmp <<= 2;
tmp += (h >> 30);

ttp = N;
ttp = (ttp << 1) + 1;

h <<= 2;
if (tmp >= ttp)
{
tmp -= ttp;
N++;
}
}

for (i = 16; i > 0; i--)
{
N <<= 1;
tmp <<= 2;
tmp += (l >> 30);

ttp = N;
ttp = (ttp << 1) + 1;

l <<= 2;
if (tmp >= ttp)
{
tmp -= ttp;
N++;
}
}
return N;
}
}

用法:

uint64_t  a=9999999800000001;

uint32_t  B= 0;

B = sqrt_64(((a>>32)&0xFFFFFFFF),(a&0xFFFFFFFF));

原文地址:https://www.cnblogs.com/Tearsly/p/10880732.html

时间: 2024-08-03 17:55:20

C语言中32位数据平方后开方的程序的相关文章

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首先我们知道32位汇编是可以调用Windows API的,那么今天我们就调用windowsAPI来写一个窗口程序 如果你有windows开发知识,那么就很理解了,如果没有,那么跟着我写,跟着步骤去写,那么也可以写出来 首先我们要编写一个窗口程序(使用SDKAPI编写)有几个步骤 1.设计窗口类 2.注

Win7旗舰版64位下编译32位的带CGO的GoLang程序

开发过程中,遇到一个问题. 客户服务器端为32位Windows系统,软件系统必须编译成32位系统才能在客户端正常运行. 本人开发环境: Win7旗舰版64位 Golang 1.8 64位 TMD-GCC5.1 64位 在此情况下,使用批处理文件如下: set GOOS=windows set GOARCH=386 set CGO_ENABLED=1 go build pcms pause 系统调用go-sqlite3,使用cgo调用,会报出编译错误,原因就是gcc调用的异常 使用交叉编译的方式总

Windows下游戏程序使用32位的dll文件-解决“应用程序无法正常启动0xc000007b”问题

Windows7下刚刚安装完游戏,启动游戏时缺失dll文件,在游戏安装目录下补充之后启动出现错误: 应用程序无法正常启动0xc000007b 找到原因是在添加dll文件时使用了适合64位系统的dll文件,应该使用适合32位系统的dll文件(尽管系统为64位). 参考链接:应用程序无法正常启动0xc000007b怎么解决 猜测原因是可能游戏制作时使用的全部是适合32系统的动态链接文件.

win7 32位openvpn安装后,无法使用故障报错.

Thu Sep 04 09:20:31 2014 ROUTE: route addition failed using CreateIpForwardEntry: 至少有一个参数不正确.   [if_index=28]Thu Sep 04 09:20:31 2014 Route addition via IPAPI failedThu Sep 04 09:20:31 2014 route ADD 10.8.8.0 MASK 255.255.255.0 10.8.8.101Thu Sep 04 0

【转】在64位机上跑32位程序注意事项

原文网址:http://blog.chinaunix.net/uid-20742320-id-4744472.html 今天在交叉编译一个应用程序时,发现porting到板子上比较麻烦(nfs还没有支持),想现在PC上调试. 于是在板子上编译好,运行,发现指定的网页打不开,以为是httpd的confi有些出入,检查了下,没有错误. 在一筹莫展之际,直接在pc上运行突然发现出现segmdefault. segmdefault又是如何出现的呢? 通过file命令查看目标文件是elf64 而reade

&lt;转&gt;32位移植到64位 注意事项

32bit-64bit porting work注意事项 64位服务器逐步普及,各条产品线对64位升级的需求也不断加大.在本文中,主要讨论向64位平台移植现有32位代码时,应注意的一些细小问题. 什么样的程序需要升级到64位? 理论上说,64位的操作系统,对32位的程序具有良好的兼容性,即使全部换成64位平台,依然可以良好的运行32位的程序.因此,许多目前在32位平台上运行良好的程序也许不必移植,有选择,有甄别的进行模块的升级,对我们工作的展开,是有帮助的. 什么样的程序需要升级到64位呢? 除

32位和64位系统,到底哪个好?

今天这是个纯理论分享了,32位和64位系统有什么区别?我们到底用哪个好?这个问题在xp时代都不存在,vista系统不谈,从win7开始,才出现在我们面前,让我们抉择.相信好多人不懂或有些误区,更甚至有部分自称为[专家]的人告诉你用32位的,用64位的系统好多软件都不兼容,娜娜想说的是:没有最好,只有最合适!下面娜娜来揭开他们之间的面纱,看完之后,相信你一定能够知道哪个系统更适合自己了. 1)为什么有32位和64位之分? 其实说32位和64位是指系统支持CPU一次能够处理的数据是32位还是64位,

【转】32位移植到64位 注意事项 ----不错

原文网址:http://blog.csdn.net/w174504744/article/details/8678045 32bit-64bit porting work注意事项 64位服务器逐步普及,各条产品线对64位升级的需求也不断加大.在本文中,主要讨论向64位平台移植现有32位代码时,应注意的一些细小问题. 什么样的程序需要升级到64位? 理论上说,64位的操作系统,对32位的程序具有良好的兼容性,即使全部换成64位平台,依然可以良好的运行32位的程序.因此,许多目前在32位平台上运行良

汇编程序 - 1 (32位无符号乘法)

这个是学校的课程设计<微机原理与接口技术>内容,自己写得有些缺陷,但基本实现了运算功能,暂且记录,方便日后回顾,也供大家参考. 缺陷: 1. 只能固定长度输入(32位对应为00000000 -- FFFFFFFF) 2. 例如输入6(16进制)只能类似输入00000006 3.只考虑了0-F中的0-9输入,也没考虑A-F或者a-f 暂时没空修改,以后有空或许会再写写 实验环境: 1.我是在虚拟机上的Windows 7 调试的,TD调试中显示的cpu是80486,但本次实验要求所用8086(16