ImageVerifierCode 换一换
格式:DOCX , 页数:4 ,大小:45.52KB ,
资源ID:2373147      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-2373147.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中值定理法(开平方算法).docx)为本站会员(ng****60)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

中值定理法(开平方算法).docx

1、最快的开平方算法(中值定理法 )作者:李义 2006 关键词:最快 开平方根 算法 中值定理 开方 整数平方数中值定理: 设 a、b、c 为顺序排列间距为 P 的 3 个整数,A 、B 、C 是它们的平方 则有:b2(a 2+c2)/2-R,即:B(A+C)/2-R 其中:修正值 RP2 特别地,如果间隔 P1、2 、 4、 8、 16、2 n (或 Pn=2Pn-1)时 则: 修正值 R1、4、16 、64 、256 、22n (或 Rn4Rn-1) 证明: 已知:ab+P c b-P 有:a 2(b+P)2 b2+2Pb+P2 c2 (b-P)2b2-2Pb+P2 则:a2+c22b2+2

2、P2 即:b2 (a2+c2)/2-P2 特别地 当: 间隔 P2 n2*2 n -12 Pn-1 时(n 为自然数) 则: 修正值 RP222n (2 Pn-1)24(P n-1)24Rn-1 (证明完) 根据以上定理,可以实现整数快速开平方根计算: 先构建一个长度为 N 的数组 1: 数组长 N=Ni+1 1 2 3 4 5 间隔 P=2Pi 2 4 8 16 32 修正值 R=4Ri 4 16 64 256 1024 以及一个对应 2PN(这里 N=4、2PN=32) 的典型数和它的平方数组 2: 按 N=4 间隔 排列的数 d=di+2PN 32 64 96 128 160 192 2

3、24 256 该数的平方 D=d2 1024 4096 9216 16384 25600 36864 50176 65536 显然,N 值越大则数组 2 越小、程序代码效率越高、用时(插值次数) 越多. 以 2 字节整数开方为例的计算流程如下: 其中, 被开方数 D(范围 065536),其平方根 d(范围 0256) 注:1、查表可以从任何位置开始, 对计算速度影响不大. 其中 D=0、D=1 、D=Di、 D65280 判断可以省去. 2、此算法完全没有乘法试算,其 1/2、1/4 除法运算可由二进制移位简单实现,且为完全补偿后的精确插值,所以递归速度非常快(这里 4 次). 3、最后运算

4、已经包括了小数部分的精确 4 舍 5 入算法. 4、此算法略加改动,即可实现更长字节整数或定长浮点数平方根精确解 ,其逆运算也可以实现乘方运算. 一个 C 语言实例: / sqrt_2 中值定理法开平方程序( 直接查表-插值) / 输入 D (两字节无符号整数) / 输出 d (一字节无符号整数) char a,b,c,p; int A,B,C,D,R,K; void main() D=11111; / 被开方数 if(D50176)A=0; a=0; C=50176;c=224;break; / 查表 if(D36864)A=50176;a=224;C=36864;c=192;break;

5、if(D25600)A=36864;a=192;C=25600;c=160;break; if(D16384)A=25600;a=160;C=16384;c=128;break; if(D9216) A=16384; a=128;C= 9216; c= 96; break; if(D4096) A= 9216; a= 96; C= 4096; c= 64; break; if(D1024) A= 4096; a= 64; C= 1024; c= 32; break; A= 1024; a= 32; C= 0; c= 0; break; p=16;R=256; / 初始化数据 do b=c+p;

6、B=C;B=1; / 插值计算循环 if(A!=0)K=A;K=1; else K=0x8000; / 65536=1 的数 B+=K;B-=R; if(DB)C=B;c=b; elseA=B;a=b; p=1;R=2; while(p!=1); / 循环 4 次结束 K=A-C;K=2;A-=K; C+=K; / 小数部分四舍五入 if(Delse if(Delse b=a; /开方结束 进一步研究表明,由于循环内所有运算都是加、减、位移、比较等简单运算,所花费的时间很少,可以适当加大循环次数. 特别地,如果把间隔 P 加大到 128,对应修正值 R=13684,则循环次数 N=7,对应数组

7、 2 就简化到: 按 N=7 间隔排列的数 d=di+Pn 0 256 512 该数的平方 Di=d*d 0 65536 262144 这时, 对于两字节数被开方数 D 来讲,查表环节也可省去, 程序代码大幅减少,计算流程如下: C 语言程序的一个例子: unsigned char a,b,p=0x80; unsigned int K,A,B,C,R=0x4000,D=60000; sqt1() do b=a-p;B=C;B=1; if(A)K=A;K=1; else K=0x8000; B+=K;B-=R; if(DB)C=B; elseA=B;a=b; p=1;R=2; while(p!=

8、1); /循环 7 次结束 p=(A-C)2;A-=p; C+=p; b=a; if(D A)b-; if(D C)b-; /输出方根 b 程序里只用了一个特别的数 128(及其它的平方数 16384),就能够把两字节数 065535 范围内的任意整数的整数平方根精确(小数部分严格 4 舍 5 入) 求解. 程序思想还可以继续延伸到更长字节无符号整数的开方,只需要修改对应的初始值 p、R 就行了. 结论 : 本文首先提出并证明了整数平方数中值定理,进而提出一种基于此定理的的快速开方算法,并给出了具体的计算流程和 C 语言程序实例.由于全部运算不使用乘法运算或幂运算,只使用加、减、移位、逻辑等简单运算,只引入极少的初始变量, 在经过有限次循环后即可迅速逼近任意有限大整数的整数平方根的精确解(小数部分严格 4 舍 5 入),从而把整数开平方运算的迄今最快速度提高了一个数量级. 此算法对于由没有集成硬件乘法器的芯片组成的微处理(控制 )系统、同时要担负大量开方运算而时间特别紧张的应用 如大型游戏程序、图形处理系统中两坐标点的距离计算(方根)、交流电压有效值等控制计算( 均方根) 具有一针见血的效果,对于任何高级程序语言、游戏机乃至计算器、民用或工业控制系统中的开平方函数代码的优化具有显著积极的意义.

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。