最快的开方算法(中值定理法)

关键词:最快 开平方根 算法 中值定理 开方

 

整数平方数中值定理

abc为顺序排列间距为P3个整数,ABC是它们的平方

则有:b2=(a 2c2)/2R,即:B=(AC)/2R

其中:修正值RP2

特别地,如果间隔P12 4 8 16…2 n (Pn=2Pn-1)时

则:        修正值R141664256…22n (Rn4Rn-1

 

证明

已知:abPcbP

有:a 2=(bP2b22PbP2c2=(bP2b22PbP2

则:a2c22b22P2

即:b2=(a2c2)/2P2

特别地

当:间隔      P2 n2*2 n -12 Pn-1时(n为自然数)

则:修正值 RP222n=(2 Pn-124P n-124Rn-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=42PN=32)的典型数和它的平方数组2

  ———————————————————————————————————

  按P=16间隔

  排列的数d=di+2PN   32    64    96    128   160    192    224    256

  该数的平方  D=d2 1024  4096  9216  16384  5600  36864  50176  65536

 

  显然,N值越大则数组2越小、程序代码效率越高、耗时(插值次数)越多。

 

2字节整数开方为例的计算流程如下:

其中,被开方数D(范围0~65536),其平方根d(范围0~256

1、查表可以从任何位置开始,对计算速度影响不大。

2、此算法完全没有乘法试算,其1/21/4除法运算可由二进制移位简单实现,且为完全补偿后的精确插值,所以递归速度非常快(这里最多4次),机器时间应不超过一个软件实现的典型乘法周期(开方比乘法快!?)。

3、最后运算已经包括了小数部分的精确45入算法。

4、此算法略加改动,即可实现更长字节整数或定长浮点数平方根精确解,其逆运算也可以实现乘方运算。

 

进一步研究表明,由于循环内所有运算都是加、减、位移、比较等简单运算,所花费的时间很少,可以适当加大循环次数。

特别地,如果把间隔P加大到128,对应修正值R=13684,则循环次数N=7,对应数组2就简化到:

———————————————————————————

P=128间隔排列的数  d=di+Pn    0    256        512 ———————————————————————————

该数的平方            Di=d2     0   65536     262144

 

这时,对于两字节数被开方数D来讲,查表环节也可省去,程序代码大幅减少,计算流程如下:

 

注:程序里利用了两字节无符号整数的机器算法的标准进位和负数表达,既:65536=00-1=65535(对单字节是:256=00-1=255)。

 

程序里只用了一个特别的数128(及其它的平方数16384),就能够把两字节数0~65280范围内的任意整数的整数平方根精确(小数部分严格45入)求解!

上述程序还可以基本不加修改地适用于无符号带进位两字节整数的开方运算,从而把被开方数范围再扩大一倍(0~131071,对应根的范围0~362)。这只须在程序开始前增加一段关于边界和进位运算的如下内容:

其中:D’为D的进位字,d’为d的进位字。

 

程序思想还可以继续延伸到更长字节(带进位)无符号整数的开方,只需要修改对应的初始值就行了:

5~10位十进制数开方所需要的计算参数:

————————————————————————————————

       P             128          512        2048          4096            16384            65536

       R         16384    262144   4194304   16777216     268435456   4294967296

       N                7             9            11              12                 14                  16

d字节长           1             2              2                                  2                   3

D字节长           2             3              3                4                   4                    5

十进制          5             6              7                8                   9                  10

D最大值 131071  1048575  16777215  134217727  1073741823  17179869183

————————————————————————————————

 

 

结论

本文首先提出并证明了整数平方数中值 定理 ,进而提出一种基于此定理的的快速开方算法,并给出了具体的计算流程。由于全部运算不使用 乘法 运算或幂运算,只使用加、减、移位、逻辑等简单运算,只引入极少的初始变量,在经过有限次循环后即可迅速逼近整数的整数 平方根 的精确解( 小数 部分严格45入),从而把整数开方运算的机器时间减少极限。其运算速度较之目前最快的牛顿迭代法提高了一个数量级,达到与乘法运算相当的水平。

(全文完)  

其中,红色表示的数据组是需要带进位运算的。
  ———————————————————————————————————
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 积分中值定理指出,在一个定义域内的某一函数的积分,可以通过在这个定义域中某一点上取函数值与定义域长度的乘积来近似计算,而微分中值定理则认为,在某一点上,函数的导数可以近似由函数在该点左右两点上取值的差值除以它们之间的距离所得。 ### 回答2: 积分中值定理和微分中值定理是微积分中两个重要的定理。 积分中值定理是指如果函数$f(x)$在闭区间$[a, b]$上连续且可积,那么存在一个$\xi$在区间$(a, b)$内,使得$\int_a^b f(x)dx = f(\xi)(b-a)$。简单说,积分中值定理表明在一个连续函数的定积分中,一定存在某个点,使得该点的函数值与其定义域上的平均值相等。 微分中值定理是指如果函数$f(x)$在闭区间$[a, b]$上可导且连续,那么存在一个$\xi$在开区间$(a, b)$内,使得$f'(\xi) = \frac{f(b)-f(a)}{b-a}$。简单说,微分中值定理表明在一个可导函数的导数中,一定存在某个点满足导数等于该函数在闭区间上的斜率。 两个定理的区别主要在于对象和定理的表达方式上。积分中值定理是关于函数在闭区间上定积分的取值与函数在内部某个点上的函数值之间的关系。而微分中值定理则是关于函数在闭区间上的导函数与函数在内部某个点上的斜率之间的关系。 ### 回答3: 积分中值定理和微分中值定理都属于微积分中的重要定理,但它们的应用对象不同,所表示的意义也有所差异。 积分中值定理是用来描述定积分的性质的定理,它指出如果一个函数在闭区间[a,b]上连续,并且满足一定的条件,那么在[a,b]上必然存在一点c,使得函数在c处的取值等于整个区间上函数的平均值。具体来说,对于函数f(x)在闭区间[a,b]上,存在一点c,使得∫[a,b]f(x)dx = (b-a)f(c)。 微分中值定理是用来描述导数的性质的定理,它指出如果一个函数在闭区间[a,b]上是可导的,并且满足一定的条件,那么在(a,b)内必然存在一点c,使得函数在c处的导数等于函数在该区间上两个端点的函数值的差与对应的导数的乘积的比值。具体来说,对于函数f(x)在闭区间[a,b]上可导,存在一点c,使得f'(c) = (f(b)-f(a))/(b-a)。 综上所述,积分中值定理和微分中值定理的不同主要体现在它们的应用对象和所代表的意义上。积分中值定理描述了整个区间上函数的平均值与函数在某一点处的关系,而微分中值定理描述了函数在某一区间上的导数与函数在该区间内两个端点处函数值的关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值