快速平方根算法(1)
平方根运算计算
![平方根运算计算](https://img.taocdn.com/s3/m/47c3fc6ccec789eb172ded630b1c59eef9c79a5b.png)
平方根运算计算平方根是一种常见的数学运算,用于求解一个数的平方根。
在数学中,平方根通常表示为√x,表示寻找一个数的平方根。
在计算中,我们使用平方根运算符号来表示,如√x。
本文将介绍平方根运算的计算方法,并提供一些例子来说明。
一、平方根的计算方法平方根的计算方法有多种,其中最常见的方法是使用开方运算符号√来计算。
但在电脑或计算器中,我们通常使用算法来计算平方根。
1. 迭代法迭代法是计算平方根的常见方法之一。
它通过反复逼近的方式来得到一个数的平方根。
具体方法如下:步骤1:选择一个初始猜测值x0,计算 x1 = (x0 + a / x0) / 2,其中a 是待求平方根的数。
步骤2:检查 x1 和 x0 的差异。
如果差异小于指定的精度范围,则终止计算并得到结果x1,否则继续迭代计算。
步骤3:将 x1 当作新的初始猜测值,重复步骤1和2,直到达到指定的精度要求。
2. 牛顿法牛顿法也是一种常见的平方根计算方法。
它基于泰勒级数近似的原理,通过迭代的方式逼近平方根。
具体方法如下:步骤1:选择一个初始猜测值x0,计算 x1 = (x0 + a / x0) / 2,其中a 是待求平方根的数。
步骤2:检查 x1 和 x0 的差异。
如果差异小于指定的精度范围,则终止计算并得到结果x1,否则继续迭代计算。
步骤3:将 x1 当作新的初始猜测值,重复步骤1和2,直到达到指定的精度要求。
二、平方根计算的例子下面是几个平方根计算的例子,以帮助理解平方根运算的实际应用。
例子1:计算√25使用迭代法计算:步骤1:选择初始猜测值x0 = 5,计算 x1 = (x0 + 25 / x0) / 2 = (5 +25 / 5) / 2 = 3.5。
步骤2:检查 x1 和 x0 的差异,差异较大,继续计算。
步骤3:将 x1 当作新的初始猜测值,重复步骤1和2。
重复以上步骤几次后,最终得到结果:√25 ≈ 5。
例子2:计算√2使用牛顿法计算:步骤1:选择初始猜测值x0 = 1,计算 x1 = (x0 + 2 / x0) / 2 = (1 + 2 / 1) / 2 = 1.5。
如何快速计算整数的平方根
![如何快速计算整数的平方根](https://img.taocdn.com/s3/m/c26d2e000812a21614791711cc7931b765ce7b16.png)
如何快速计算整数的平方根在数学中,平方根是一个非常重要的概念。
它可以帮助我们解决很多实际问题,比如计算物体的面积、求解方程等。
而对于整数的平方根,我们可以通过一些快速的方法来进行计算。
首先,我们可以利用二分法来计算整数的平方根。
二分法是一种非常常用的搜索算法,它通过不断缩小搜索范围来找到目标值。
对于整数的平方根,我们可以将搜索范围设置为[1, x],其中x为待求整数的值。
然后,我们可以通过不断将搜索范围一分为二,来逼近整数的平方根。
具体的算法如下:1. 初始化左边界l为1,右边界r为x。
2. 当l小于等于r时,执行以下步骤:1) 计算中间值mid = (l + r) / 2。
2) 如果mid的平方等于x,返回mid。
3) 如果mid的平方大于x,将r更新为mid - 1。
4) 如果mid的平方小于x,将l更新为mid + 1。
3. 返回l - 1作为整数x的平方根。
通过二分法,我们可以在O(logx)的时间复杂度内计算整数的平方根。
这种方法的优点是简单易懂,缺点是需要进行多次迭代计算,当整数较大时,计算时间会较长。
除了二分法,我们还可以利用牛顿迭代法来计算整数的平方根。
牛顿迭代法是一种用于求解方程的迭代方法,它通过不断逼近方程的根来得到解。
对于整数的平方根,我们可以将方程设置为f(x) = x^2 - n = 0,其中n为待求整数的值。
具体的算法如下:1. 初始化猜测值x为n。
2. 当x的平方与n的差的绝对值大于一个很小的数时,执行以下步骤:1) 将x更新为x - (x^2 - n) / (2 * x)。
3. 返回x作为整数n的平方根。
通过牛顿迭代法,我们可以在O(logx)的时间复杂度内计算整数的平方根。
这种方法的优点是收敛速度快,缺点是需要进行多次迭代计算,当整数较大时,计算时间会较长。
除了上述的方法,我们还可以利用位运算来计算整数的平方根。
位运算是计算机中常用的一种操作,它可以快速地对二进制数进行运算。
平方根的计算方法
![平方根的计算方法](https://img.taocdn.com/s3/m/70dd0c995122aaea998fcc22bcd126fff7055de3.png)
平方根的计算方法平方根是数学中常见的一个运算,用于求一个数的平方根。
在实际应用中,我们经常需要计算一个数的平方根,比如在几何学、物理学以及计算机科学等领域。
本文将介绍几种常见的平方根计算方法。
一、开方运算符开方运算符是一种求平方根的直接方法。
表示平方根的符号为√,后面跟随要开方的数。
例如,√9表示对9进行开方运算,结果为3。
这种方法适用于计算整数和完全平方数的平方根。
然而,对于非完全平方数,需要使用其他方法进行计算。
二、牛顿迭代法牛顿迭代法是一种常用的数值方法,用于逼近非线性方程的解。
对于求解平方根的问题,可以利用牛顿迭代法进行逼近计算。
具体步骤如下:1. 首先,选择一个初始估计值x0,通常可以选取目标数的一半作为初始值。
2. 计算下一个估计值x1,通过使用公式x1 = (x0 + n/x0)/2,其中n 是要求平方根的数。
3. 不断重复步骤2,直到满足终止条件。
常见的终止条件是前后两个估计值的差小于一个预设的容差。
牛顿迭代法的优点是收敛速度较快,通常可以在几次迭代后得到精确的结果。
然而,该方法对于初始估计值的选择比较敏感,可能会产生较大的误差。
三、二分查找法二分查找法是一种常用的搜索算法,可以在一个有序的数列中查找目标值。
在求解平方根的问题中,我们可以将平方根的取值范围进行逼近,然后使用二分查找法进行计算。
具体步骤如下:1. 首先,确定平方根的上下界,通常可以选择0作为下界,目标数作为上界。
2. 计算平方根的中间值mid,通过使用公式mid = (low + high)/2,其中low和high分别为上下界的初始值。
3. 比较中间值mid和目标数的平方的大小关系:a) 如果mid^2 等于目标数,则mid为目标数的平方根,算法结束。
b) 如果 mid^2 大于目标数,则目标数的平方根必定在low和mid之间,将high更新为mid-1,然后重复步骤2。
c) 如果 mid^2 小于目标数,则目标数的平方根必定在mid和high之间,将low更新为mid+1,然后重复步骤2。
快速平方根算法
![快速平方根算法](https://img.taocdn.com/s3/m/1b58d8ed6e1aff00bed5b9f3f90f76c661374cd1.png)
快速平方根算法
快速平方根算法,是指一种快速计算一个数的平方根的算法。
它在各个领域中都被广泛地应用,比如在数学、物理、计算机科学等方面。
它的主要特点是使用了二分查找的思想,能够在很短的时间内计算出一个数的平方根,而且计算结果也非常准确。
快速平方根算法最初由印度数学家巴克兰·阿查里亚提出,后来又被欧洲数学家们不断推广和完善。
该算法的核心是使用了二分查找思想和牛顿迭代法,能够在迭代的过程中不断逼近一个数的平方根的真实值。
在实际应用中,该算法的速度非常快,比其他平方根算法要更为高效。
快速平方根算法的实现十分简单,它的主要步骤如下:
1.首先确定要求平方根的数和误差范围。
2.将该数除以2,并以此作为平方根的初始估计值。
3.用初始估计值去迭代,并逐渐逼近平方根的真实值。
4.当误差小于所规定的误差范围时,即可得到该数的平方根。
需要注意的是,在实际应用中,对于不同的数,可能需要进行不同的调整,以保证算法的准确性和执行效率。
总的来说,快速平方根算法是一种非常有效的算法,能够在短时间内计算出一个数的平方根,并且在实际应用中表现出了很高的精度
和准确性。
对于计算机科学等领域的从业者来说,了解和掌握该算法的原理和实现方式非常重要,可以帮助他们进行更快更准确的计算。
平方根的计算方法
![平方根的计算方法](https://img.taocdn.com/s3/m/97e657faba4cf7ec4afe04a1b0717fd5370cb245.png)
平方根的计算方法导言:平方根(square root)是数学中常见的运算,用于求一个数的平方根。
计算平方根可以帮助我们解决很多实际问题,例如在几何学、物理学和工程学中的应用。
本文将介绍几种计算平方根的方法,并探讨它们的优缺点。
一、牛顿法(Newton's Method)牛顿法是一种迭代法,通过不断逼近平方根的值来得到更加精确的结果。
该方法基于牛顿-拉夫逊法则,其迭代公式如下:x_(x+1) = x_x - (x_x^2 - x)/(2x_x)其中,x为需要求平方根的数,x为迭代次数,x_x为迭代过程中的近似值。
通过迭代计算,x_x将逐渐逼近平方根。
牛顿法的优点是收敛速度快、迭代次数较少,适用于求解大部分整数和实数的平方根。
但是,牛顿法需要选择一个合适的初始值,否则可能导致结果偏离真实值。
二、二分法(Bisection Method)二分法是一种基于区间划分的方法,通过不断将区间缩小,逐渐逼近平方根的值。
该方法的思路是,如果一个数的平方大于待求平方根的数,那么这个数的平方根必然在该数左侧;反之,如果一个数的平方小于待求平方根的数,那么这个数的平方根必然在该数右侧。
通过不断将区间一分为二,可以逐步缩小范围。
二分法的优点是简单易实现,并且收敛性较好。
然而,与牛顿法相比,二分法的收敛速度较慢,需要更多的迭代次数。
三、连分数(Continued Fraction)法连分数法是一种将平方根表示为连分数的方法,通过截断连分数的展开式,可以近似计算平方根的值。
以求解正整数的平方根为例,设平方根为一个无限连分数:√x = x_0 + 1/(x_1 + 1/(x_2 + 1/(x_3 + 1/(x_4 + ...))))其中,x_x为连分数的系数。
通过不断截断、逼近连分数的展开,可以得到近似的平方根。
连分数法的优点是可以提供较为准确的结果,并且在计算机实现时能够保持高精度。
然而,连分数法的计算步骤繁琐,对于非整数的平方根计算较为复杂。
平方根的计算方法有哪些技巧
![平方根的计算方法有哪些技巧](https://img.taocdn.com/s3/m/712a64cddbef5ef7ba0d4a7302768e9950e76e66.png)
平方根的计算方法有哪些技巧平方根,这可真是数学世界里一个有点神秘又有趣的家伙!咱从小学到高中的数学学习里,它可是常常冒出来和咱们打交道。
那怎么才能轻松搞定它的计算呢?这里面还真有不少小技巧!先来说说最基础的,我们要知道一个正数有两个平方根,它们互为相反数。
比如说 9 的平方根,就是 ±3 。
这是最基本的概念,可不能弄混啦!那计算平方根的时候,咱们可以试试分解质因数的方法。
比如说要算 72 的平方根,先把 72 分解质因数,72 = 2×2×2×3×3 ,然后把相同的质因数两两分组,就能得到 72 =(2×2×3)×(2×3)= 12×6 ,所以 72 的平方根就是±6√2 。
还有一个小技巧,就是记住一些常见数字的平方根。
像 4 的平方根是 ±2 ,9 的平方根是 ±3 ,16 的平方根是 ±4 等等。
这样在计算的时候,如果碰到和这些数字相关的,就能很快反应过来。
我记得我以前教过一个学生,叫小明。
他呀,一开始对平方根的计算那是一头雾水,总是出错。
有一次做作业,算 25 的平方根,他居然给我写成了 5 ,少写了个-5 。
我就问他:“小明,你想想,一个正数是不是有两个平方根呀?就像一个人有两只手一样,少了一只可不行!” 他挠挠头,不好意思地笑了。
后来,我给他专门讲了分解质因数的方法,还让他多背背常见数字的平方根。
慢慢地,小明找到了感觉,计算平方根的题目做得越来越好了。
有一次考试,他在平方根的计算上一分都没丢,可把他高兴坏了!咱们再来说说估算法。
如果数字不是完全平方数,咱们可以通过估算来大致确定平方根的范围。
比如说要算 11 的平方根,因为 9 < 11 < 16 ,所以 11 的平方根就在 3 和 4 之间。
另外,如果是小数的平方根计算,咱们可以把小数转化成分数。
[转]快速平方根算法
![[转]快速平方根算法](https://img.taocdn.com/s3/m/af1fbfd65ebfc77da26925c52cc58bd630869352.png)
[转]快速平⽅根算法在3D图形编程中,经常要求平⽅根或平⽅根的倒数,例如:求向量的长度或将向量归⼀化。
C数学函数库中的sqrt具有理想的精度,但对于3D游戏程式来说速度太慢。
我们希望能够在保证⾜够的精度的同时,进⼀步提⾼速度。
Carmack在QUAKE3中使⽤了下⾯的算法,它第⼀次在公众场合出现的时候,⼏乎震住了所有的⼈。
据说该算法其实并不是Carmack发明的,它真正的作者是Nvidia的Gary Tarolli(未经证实)。
//// 计算参数x的平⽅根的倒数//float InvSqrt (float x){float xhalf = 0.5f*x;int i = *(int*)&x;i = 0x5f3759df - (i >> 1); // 计算第⼀个近似根x = *(float*)&i;x = x*(1.5f - xhalf*x*x); // ⽜顿迭代法return x;}该算法的本质其实就是⽜顿迭代法(Newton-Raphson Method,简称NR),⽽NR的基础则是泰勒级数(Taylor Series)。
NR是⼀种求⽅程的近似根的⽅法。
⾸先要估计⼀个与⽅程的根⽐较靠近的数值,然后根据公式推算下⼀个更加近似的数值,不断重复直到可以获得满意的精度。
其公式如下:函数:y=f(x)其⼀阶导数为:y'=f'(x)则⽅程:f(x)=0 的第n+1个近似根为x[n+1] = x[n] - f(x[n]) / f'(x[n])NR最关键的地⽅在于估计第⼀个近似根。
如果该近似根与真根⾜够靠近的话,那么只需要少数⼏次迭代,就可以得到满意的解。
现在回过头来看看如何利⽤⽜顿法来解决我们的问题。
求平⽅根的倒数,实际就是求⽅程1/(x^2)-a=0的解。
将该⽅程按⽜顿迭代法的公式展开为:x[n+1]=1/2*x[n]*(3-a*x[n]*x[n])将1/2放到括号⾥⾯,就得到了上⾯那个函数的倒数第⼆⾏。
求平方根的算法
![求平方根的算法](https://img.taocdn.com/s3/m/78e2342ebfd5b9f3f90f76c66137ee06eef94e77.png)
求平方根的算法算法是计算机科学中的重要概念,它是由一系列有序的、清晰而且可行的步骤所组成的一种解题方法。
在数学中,求平方根是一种重要的运算,因为它可以解决很多实际问题,比如在物理学中计算速度、加速度等等。
在这篇文章中,我们将学习几种常用的求平方根的算法。
1. 牛顿迭代法牛顿迭代法又称牛顿-拉弗森方法,是一种求解方程的经典算法。
它也可以用于求解平方根,以下是其算法步骤:(1)设给定的数字为n。
(2)设一个初始值x0,通常是n的一半。
(3)根据牛顿迭代公式,计算出下一个迭代值xn+1。
公式为:xn+1 = (xn + n / xn) / 2。
(4)如果xn+1和xn的差不太大,即 | xn+1 - xn | < ε,其中ε是一个足够小的正数,则停止迭代,此时xn+1就是n的平方根。
(5)否则,将xn+1作为下一次迭代的初始值,进入步骤(3)。
下面是使用Python语言实现牛顿迭代法求平方根的代码:```python def sqrt_newton(n): x0 = n / 2 while True: x1 = (x0 + n / x0) / 2if abs(x1 - x0) < 1e-6: return x1 x0 = x1 ```2. 二分法二分法也是一种经典的算法,在计算平方根时也可以使用。
这种算法的思想是:如果目标值在某个区间内,那么不断缩小这个区间,最终就可以得到它的值。
以下是具体步骤:(1)设给定的数字为n。
(2)设left和right分别为计算区间的起点和终点。
(3)当left <= right,执行以下操作:a. 计算区间的中点mid,即mid = (left + right) / 2。
b. 如果mid * mid小于n,则将left更新为mid + 1。
c. 如果mid * mid大于n,则将right更新为mid - 1。
d. 否则,mid* mid等于n,停止二分查找,返回mid。
平方根计算方法
![平方根计算方法](https://img.taocdn.com/s3/m/17795692c0c708a1284ac850ad02de80d4d80635.png)
平方根计算方法平方根是数学中常用的一个概念,求一个数的平方根可以帮助我们理解数的大小关系以及解决一些实际问题。
在计算平方根的过程中,我们常常用到各种不同的方法和公式。
本文将介绍几种常用的平方根计算方法。
一、牛顿迭代法牛顿迭代法是一种求函数零点的数值逼近方法,也可以用来计算平方根。
以下是使用牛顿迭代法计算平方根的步骤:1. 我们要求解的平方根是x,我们先随意猜测一个近似值y。
2. 计算出y的平方,如果y的平方接近于x,那么y就是x的平方根。
3. 如果y的平方与x相差较大,我们可以利用牛顿迭代法进行改进。
a. 我们可以通过求函数f(y)=y^2-x的导数f'(y)来得到曲线的切线斜率。
b. 曲线上的一点(x, f(x))和曲线的切线交点(x', f(x'))可以近似地代表函数f(y)的零点。
c. 利用切线和x轴的交点求出新的近似值,再通过重复步骤3,直到y的平方接近于x。
牛顿迭代法是一种快速高效的平方根计算方法,但在实际应用中可能会出现收敛性问题。
因此,当使用牛顿迭代法时,我们需要注意收敛性的检验。
二、二分法二分法是一种基于区间逼近的方法,也可以用来计算平方根。
以下是使用二分法计算平方根的步骤:1. 我们要求解的平方根是x,我们先确定一个范围[a, b],其中a为x的下界,b为x的上界。
2. 计算出区间的中点c,即c=(a+b)/2。
3. 如果c的平方接近于x,那么c就是x的平方根。
4. 如果c的平方大于x,说明平方根落在区间[a, c]内,那么我们将b更新为c。
5. 如果c的平方小于x,说明平方根落在区间[c, b]内,那么我们将a更新为c。
6. 重复步骤2到5,直到区间的长度足够小或满足精度要求。
三、连分数法连分数法是一种用连分数表示平方根的方法,每一项都是一个有理数。
以下是使用连分数法计算平方根的步骤:1. 将待求的平方根表示为一个连分数形式:√x = a0 + 1/(a1 + 1/(a2 + 1/(a3 + ...)))。
求平方根的算法公式
![求平方根的算法公式](https://img.taocdn.com/s3/m/3fe28ab9a48da0116c175f0e7cd184254a351b61.png)
求平方根的算法公式平方根这玩意儿,在数学里可是个挺重要的角色。
咱们先来说说啥是平方根。
比如说,4 的平方根是啥?咱知道 2×2 = 4,还有 -2× -2 也等于 4,所以 4 的平方根就是 ±2 。
那怎么求一个数的平方根呢?这就得靠算法公式啦!求平方根的算法公式,常见的有牛顿迭代法。
这名字听着挺高大上,其实原理没那么复杂。
咱来一步步拆解。
假设咱要求一个数 a 的平方根,先随便猜一个数 x₀作为初始值。
然后按照下面这个公式来不断更新 x 的值:x₁ = (x₀ + a / x₀) / 2 。
一直重复这个过程,x 的值就会越来越接近 a 的平方根。
就像我之前教过的一个学生,叫小李。
这孩子一开始对这个公式那是一头雾水。
我就跟他说:“小李啊,你就把这当成是一个解谜的游戏,咱们要一步步找到那个正确的答案。
”小李瞪着大眼睛,一脸迷茫。
我就拿 9 这个数给他举例。
咱先猜x₀ = 3 ,然后按照公式算:x₁ = (3 + 9 / 3) / 2 = 3 。
哟呵,一次就猜对啦,不过这是运气好。
那再试试 10 。
咱还是先猜 x₀ = 3 ,x₁ = (3 + 10 / 3) / 2 ≈ 3.1667 。
再算一次 x₂ = (3.1667 + 10 / 3.1667) / 2 ≈ 3.1623 。
就这样一直算下去,就能越来越接近 10 的平方根啦。
小李跟着我一步一步算,慢慢地好像有点开窍了。
后来他自己做题的时候,一开始还是会出错,不是计算粗心,就是公式用错。
但这孩子有股子倔劲儿,不停地练习。
经过一段时间,小李已经能熟练运用这个公式求平方根了。
有一次课堂小测验,有道求平方根的难题,好多同学都没做出来,小李不仅做出来了,答案还全对!所以说啊,这个求平方根的算法公式,只要多练习,多琢磨,就没那么难。
就像咱们做其他事情一样,一开始可能觉得困难重重,但只要坚持下去,总能找到解决的办法。
在数学的世界里,平方根的算法公式就像是一把神奇的钥匙,能帮我们打开很多难题的大门。
数学技巧 - 快速计算平方根的方法
![数学技巧 - 快速计算平方根的方法](https://img.taocdn.com/s3/m/d34cd48ca0c7aa00b52acfc789eb172ded639926.png)
数学技巧 - 快速计算平方根的方法介绍在数学中,求解平方根是一个常见的运算。
而对于一些特定的数值,我们可以使用一些快速的计算方法,以减少繁琐的计算步骤和时间。
本文将介绍几种常用的快速计算平方根的方法。
方法一:牛顿迭代法牛顿迭代法是一种用于逼近函数零点的数值方法,在求解平方根时也能得到较为准确的结果。
下面是具体步骤:1.假设要求解一个数x的平方根。
2.初始化一个初始猜测值y_0,通常可以选择x/2作为初始猜测值。
3.进行迭代计算,更新猜测值y_n+1 = (y_n + x/y_n) / 2,直到收敛于精确解。
这种方法在计算上比较高效且精确,但需要进行多次迭代求解。
方法二:二分法二分法也是一种常用的数值逼近方法,在求解平方根时同样适用。
其基本思想是通过有序区间内不断地二分查找来逼近目标值。
以下是具体步骤:1.假设要求解一个数x的平方根。
2.初始化两个边界值:上界upper和下界lower。
可以选择上界为x,下界为0。
3.在每一步中,计算区间的中间值mid = (upper + lower) / 2。
4.根据中间值mid与目标值x进行比较,并更新边界值:•若 mid * mid > x,说明mid过大,将上界upper更新为mid;•若 mid * mid < x,说明mid过小,将下界lower更新为mid;•若 mid * mid == x,则找到精确解。
5.重复步骤3和4直到收敛于精确解。
二分法同样是一种高效且精确的方法,在求解平方根时常用。
方法三:近似公式除了以上基于迭代的方法外,还有一些近似公式可以快速计算平方根。
这些近似公式通常适用于特定范围或特定类型的数字。
以下是两个例子:1.牛顿-拉夫逊公式:当x接近1时,可以使用牛顿-拉弗逊(Newton-Raphson)公式来近似计算:sqrt(x) ≈ (1 + x) / 22.高斯-赛德尔算法:对于大数和浮点数,可以使用高斯-赛德尔(Gauss-Seidel)算法来近似计算:sqrt(x) ≈ x / 2 + c / (2 * x),其中c为一个常数。
sqrt方法(一)
![sqrt方法(一)](https://img.taocdn.com/s3/m/346d265d26d3240c844769eae009581b6bd9bd00.png)
sqrt方法(一)sqrt相关方法简介在数学和编程中,sqrt用于计算一个数的平方根。
计算平方根的方法有多种,本文将介绍几种常用的方法。
方法一:牛顿迭代法1.初始化一个猜测值x作为平方根的近似值。
2.使用迭代公式x = (x + n / x) / 2来更新猜测值x,其中n是待求平方根的数字。
3.重复步骤2,直到x的平方接近于n。
方法二:二分查找法1.初始化左边界left为0,右边界right为n。
2.当左边界小于等于右边界时,执行以下步骤:–计算中间值mid,mid = (left + right) / 2。
–如果mid的平方接近于n,则返回mid作为平方根。
–如果mid的平方大于n,则将右边界更新为mid-1。
–如果mid的平方小于n,则将左边界更新为mid+1。
3.返回left作为平方根。
方法三:使用数学库函数1.在许多编程语言中,都提供了sqrt函数来计算平方根。
只需要调用该函数,并传入待求平方根的数字作为参数,即可得到结果。
方法四:二进制近似法1.将n转换为二进制表示。
2.初始化一个近似值x为1。
3.对每一位的二进制数字进行迭代处理:–x的平方不断逼近n。
–如果该位为1,则将x更新为x = (x + n / x) / 2,否则保持不变。
4.重复步骤3,直到迭代收敛。
5.返回x作为平方根。
方法五:插值法1.将平方根的求解问题转化为多项式的求解问题。
2.构造一个具有稀疏系数的多项式。
3.使用插值法来求解多项式的根,即可得到平方根。
结论根据不同的场景和需求,选择合适的方法来计算平方根。
牛顿迭代法和二分查找法是比较常用的方法,而使用数学库函数则是最简单快速的方式。
二进制近似法和插值法则是更为复杂的求解方式,适用于特定的问题。
在实际应用中,可以根据具体情况进行选择。
方法一:牛顿迭代法1.初始化一个猜测值x作为平方根的近似值。
2.使用迭代公式x = (x + n / x) / 2来更新猜测值x,其中n是待求平方根的数字。
数字的平方根如何计算一个数的平方根
![数字的平方根如何计算一个数的平方根](https://img.taocdn.com/s3/m/55a81e17f11dc281e53a580216fc700abb6852e6.png)
数字的平方根如何计算一个数的平方根数字的平方根是指一个数字的平方等于该数的平方根。
计算一个数的平方根在数学中有多种方法和算法,下面将介绍几种常用的计算平方根的方法。
1. 开方法:开方法是最直接和常用的方法之一。
对于一个正数x,它的平方根y满足y的平方等于x。
因此,可以通过不断调整y的值,使得y的平方接近x,并最终找到一个近似值。
例如,要计算数字16的平方根:首先,可以猜测一个近似值,比如4。
计算4的平方等于16,与目标数相等,因此4就是16的平方根。
2. 牛顿迭代法:牛顿迭代法是一种较为快速且精确的计算平方根的方法。
它基于函数的局部线性逼近,通过迭代计算来逼近平方根的值。
假设要计算数字x的平方根,可以首先猜测一个近似值y,然后通过以下迭代公式算法来逐步改善y的值:y = (y + x/y) / 2这个过程将持续进行,直到y与上一次迭代的值非常接近为止。
最终的y就是x的平方根。
3. 二分法:二分法是一种逐渐缩小范围来逼近平方根的方法。
它基于数的平方根在一个区间内是单调递增的特性。
假设需要计算数字x的平方根,可以首先设定一个范围,比如[0, x]。
然后,将范围中点的平方与x进行比较,如果小于x,则将范围缩小为[mid, x];如果大于x,则将范围缩小为[0, mid]。
不断重复这个过程,直到找到x的平方根。
这三种方法是计算平方根的常用方法,具体使用哪种方法取决于具体情况和需求。
此外,在计算机编程中,也有专门的数学库函数来计算平方根,可以很方便地直接调用。
综上所述,计算一个数的平方根可以使用开方法、牛顿迭代法和二分法等方法。
其中,牛顿迭代法和二分法能够更快速、准确地计算出平方根的近似值。
具体方法的选择取决于需求和具体情况。
五年级数学技巧如何快速计算平方根和立方根
![五年级数学技巧如何快速计算平方根和立方根](https://img.taocdn.com/s3/m/4db4a49acf2f0066f5335a8102d276a2002960a9.png)
五年级数学技巧如何快速计算平方根和立方根计算平方根和立方根是数学中常见的运算,而在五年级学生的学习中,掌握快速计算平方根和立方根的技巧是非常重要的。
本文将介绍几种简便的方法来进行平方根和立方根的计算。
1. 快速计算平方根计算平方根的一种简单方法是通过近似值进行计算。
例如,我们要计算√7的近似值。
我们可以找一个接近√7的平方数,比如2的平方等于4和3的平方等于9。
然后我们插值计算,根据比例关系,可得2和3之间的√7的近似值应该在2和3之间,我们可以取其平均数。
所以√7约等于2.5。
在进行平方根的近似值计算时,我们可以运用上述方法。
首先找出离给定数最接近的两个完全平方数,然后进行插值计算。
这样可以在不使用复杂的算法的情况下,快速计算出平方根的近似值。
2. 快速计算立方根计算立方根也可以通过近似值进行。
例如,我们需要计算³√8的近似值。
我们可以找到一组完全立方数,例如2的立方等于8和3的立方等于27。
然后我们对这两个立方数进行插值计算,找出2和3之间的³√8的近似值。
根据比例关系,我们可以得出近似值为2.4。
同样地,在进行立方根的近似值计算时,我们可以使用类似的方法。
寻找离给定数最近的两个完全立方数,然后进行插值计算,以便快速得出近似值。
需要注意的是,这些方法只能给出近似值,而不是准确的结果。
但是在五年级学习中,对结果的近似已经足够满足大多数情况的需求。
同时,这些方法更容易理解和计算,对于提高计算速度和数学思维的发展也起到了积极的促进作用。
通过练习和熟练掌握这些计算平方根和立方根的技巧,五年级的学生们可以提高他们的计算速度和准确性,更好地应用于解决实际问题。
这也为他们将来在高年级学习中的数学知识打下了坚实的基础。
总结起来,计算平方根和立方根是数学学习中常用的运算。
通过快速计算平方根和立方根的技巧,可以提高计算速度和准确性。
近似值的计算方法可以在不使用复杂算法的情况下,快速进行计算。
开平方根的计算方法
![开平方根的计算方法](https://img.taocdn.com/s3/m/82a03cfbba4cf7ec4afe04a1b0717fd5360cb282.png)
开平方根的计算方法开平方根是数学中一个常用的计算方法,用来求一个非负数的平方根。
开平方根的计算方法主要有两种,一种是通过数学运算推导,另一种是通过数值近似计算。
1.通过数学运算推导的方法:(1)数学定理法:比如利用牛顿迭代法、二分法等数学定理来计算平方根。
以下是其中较为常用的方法:-牛顿迭代法:设f(x)=x^2-n,其中n是需要开平方根的数。
根据泰勒公式,可得f(x)在x=a点附近的近似表达式为f(a)+f'(a)(x-a),将其求根可以近似表示为x-f(a)/f'(a)=x-(x^2-n)/(2x)=(x+n/x)/2、通过迭代计算,可以得到平方根的近似值。
-二分法:设f(x)=x^2-n,其中n是需要开平方根的数。
在区间[0,n]内,不断取中点判断f(x)的正负性,逐渐缩小区间直到找到平方根的近似值。
(2)泰勒级数法:利用泰勒级数展开来计算平方根。
设函数f(x)=x^2-n,其中n是需要开平方根的数。
若将f(x)在x=a处展开为泰勒级数,可以得到f(x)的一个逼近公式,将其反解即可得到平方根的近似值。
(3)其他方法:除了上述方法外,还有一些使用特殊函数(如函数幂级数)或变形等数学运算的方法。
例如,可以通过利用欧拉恒等式公式,将开平方根的计算转化为对复数的求解,进而得到结果。
2.通过数值近似计算的方法:(1)迭代法:通过不断迭代计算,逼近原数的平方根。
常用的迭代方法有牛顿迭代法和二分法,即前文提到的通过数学运算推导的方法。
(2)逼近算法:通过设定初始值和精度要求,利用逼近算法不断逼近原数的平方根。
常用的逼近算法有泛化平方根算法、二次逼近算法等。
这些开平方根的计算方法都是在数学理论的基础上推导和运用而成的,可以根据实际需要选择适合的方法。
当然,对于计算机来说,还可以利用编程语言中提供的内置函数来计算平方根,如C语言中的sqrt(函数、Python语言中的math.sqrt(函数等。
python平方根快速算法
![python平方根快速算法](https://img.taocdn.com/s3/m/a63340a280c758f5f61fb7360b4c2e3f5627257f.png)
python平方根快速算法
计算平方根是在编程中经常遇到的问题,有几种不同的方法可以用来实现快速的平方根算法。
其中,牛顿迭代法是一种常用的方法。
牛顿迭代法是一种迭代算法,通过不断逼近函数的零点来计算平方根。
具体来说,对于要计算平方根的数x,我们可以通过不断迭代以下公式来逼近其平方根的值:
guess = (guess + x / guess) / 2。
其中guess是我们猜测的平方根的值。
我们可以选择任意初始的猜测值,然后通过上述公式进行迭代计算,直到达到所需的精度为止。
另外,还有一种快速的平方根算法是使用位操作和移位运算来计算。
这种方法通常被称为二进制平方根算法。
该算法的基本思想是将要计算平方根的数转换为二进制形式,然后对其进行位操作和移位运算来逼近平方根的值。
这种方法在一些嵌入式系统和对计算资源要求较高的环境中比较常见。
除了上述方法,还有其他一些算法可以用来实现快速的平方根
计算,例如牛顿-拉弗森方法、二分查找等。
每种方法都有其适用的场景和特点,可以根据具体的需求来选择合适的算法。
总之,Python中有多种快速的平方根算法可供选择,开发人员可以根据具体情况选择最适合自己需求的算法来计算平方根。
希望这些信息能够对你有所帮助。
快速求平方根的方法
![快速求平方根的方法](https://img.taocdn.com/s3/m/3e0342f89fc3d5bbfd0a79563c1ec5da50e2d614.png)
快速求平方根的方法平方根是数学中常见的一个概念,它代表着一个数的平方根。
对于一些复杂的数字,我们可能需要使用计算器或者其他工具来求解平方根。
但是,在某些情况下,我们可能需要快速计算平方根,而不依赖于外部工具。
本文将介绍一些常用的快速求平方根的方法。
1. 牛顿迭代法牛顿迭代法是一种常用的求解方程的数值方法,也可以用来求解平方根。
其基本思想是通过不断迭代逼近平方根的近似值。
设待求的数为x,我们可以通过以下公式进行迭代计算:x = (x + a / x) / 2其中a为待求平方根的数,x为平方根的近似值。
通过不断迭代,x 的值会越来越接近真实的平方根。
2. 二分法二分法是一种简单但有效的求解问题的方法,同样可以用于求解平方根。
二分法的思想是将待求解的区间一分为二,然后确定目标值在哪个子区间中,再对子区间进行进一步的二分,直到满足精度要求或者近似得到平方根。
具体步骤如下:- 初始化左右边界,左边界为0,右边界为待求平方根的数a。
- 计算中间值mid = (left + right) / 2。
- 若mid的平方等于a,则mid即为所求平方根。
- 若mid的平方小于a,则更新左边界为mid。
- 若mid的平方大于a,则更新右边界为mid。
- 重复上述步骤,直到满足精度要求。
3. 牛顿迭代法的改进牛顿迭代法可以通过改进,进一步提高求解平方根的效率。
一种常用的改进方法是使用倒数的平均值作为迭代公式。
具体步骤如下:- 初始化x为待求平方根的近似值。
- 计算x的平方与a的差值,记为delta。
- 通过公式x = (x + a / x) / 2计算下一个近似值。
- 若delta的绝对值小于设定的精度要求,则停止迭代,x即为所求平方根。
4. 迭代逼近法迭代逼近法是一种通过不断逼近生成平方根的方法。
它根据平方根的递增性质,不断生成比当前值更接近目标平方根的近似值。
具体步骤如下:- 初始化x为待求平方根的近似值。
- 通过公式x = x + (a - x^2) / (2 * x)计算下一个近似值。
快速开平方根算法
![快速开平方根算法](https://img.taocdn.com/s3/m/de2154bbdc88d0d233d4b14e852458fb770b38a8.png)
快速开平方根算法
快速开平方根算法是一种高效的数学运算方法,可以快速计算任何一个数字的平方根。
这种算法使用的是牛顿-拉夫逊方法,该方法可以迭代多次来得到平方根的逼近解。
本文将详细介绍快速开平方根算法的原理和具体实现。
快速开平方根算法的原理如下:假设要计算数字a的平方根,可以先猜测一个近似解x,然后用下面的式子来更新x的取值:
x = (x + a/x)/2
可以看到,上面的式子是将猜测值和目标值之间的误差减少了一半,因此如果迭代若干次,可以得到非常精确的解。
实际上,这个方法是牛顿-拉夫逊方法的应用,该方法用于求解方程的根,而开平方根也是一个求解根的问题。
具体实现上,需要先选择一个合适的猜测值x0,然后用牛顿-拉夫逊方法迭代若干次,直到收敛。
一般情况下,初始猜测值可以是目标值的一半,或者是目标值的一个近似值。
迭代的次数取决于迭代的精度要求,可以设定一个阈值,当迭代出的结果与目标值之间的差小于该阈值时,停止迭代。
快速开平方根算法的时间复杂度为O(log n),因此非常适合在需要高效的开平方根计算时使用。
该算法在数字信号处理、计算机视觉、机器学习等领域都得到了广泛应用,对于需要快速计算平方根的应用场景具有重要意义。
总之,快速开平方根算法是一种高效、精确的数学运算方法,可以快速计算任何数字的平方根。
该算法的实现相对简单,对于需要高效计算平方根的应用场景非常有用。
平方根与立方根的计算方法总结
![平方根与立方根的计算方法总结](https://img.taocdn.com/s3/m/edb34a43a36925c52cc58bd63186bceb19e8ed1a.png)
平方根与立方根的计算方法总结计算平方根和立方根是数学中常见的运算方法,可以通过不同的算法和公式来实现。
本文将对平方根和立方根的计算方法进行总结和介绍。
1. 平方根的计算方法:平方根表示一个数的算术平方根,即对于任意非负数x,其平方根为y,满足y * y = x。
平方根的计算方法有以下几种:1.1 牛顿迭代法:牛顿迭代法是一种通过不断逼近来计算平方根的方法。
具体步骤如下:1) 初始化猜测值y为x的一半;2) 根据公式y = (y + x/y) / 2进行迭代计算,直到满足精度要求为止。
1.2 二分法:二分法是一种通过将待求平方根的范围逐渐缩小,再进行逼近的方法。
具体步骤如下:1) 初始化左边界为0,右边界为x;2) 将平方根的猜测值设置为(left + right) / 2;3) 根据猜测值的平方与x的大小关系,不断调整左右边界,直到满足精度要求为止。
1.3 数字解析法:数字解析法是一种通过数值分析来计算平方根的方法。
具体步骤如下:1) 将待求平方根的数x表示为10的幂次和一个系数的乘积形式,即x = a * 10^n;2) 根据公式sqrt(x) = sqrt(a) * 10^(n/2)进行求解,其中sqrt(a)可通过查表或其他方法获得;3) 通过数值分析的技巧对n/2进行修正,得到更精确的结果。
2. 立方根的计算方法:立方根表示一个数的算术立方根,即对于任意数x,其立方根为y,满足y * y * y = x。
立方根的计算方法有以下几种:2.1 牛顿迭代法:与计算平方根类似,牛顿迭代法也可以用于计算立方根。
具体步骤与平方根的计算方法一致,只是迭代的公式变为y = (2 * y + x/y²) / 3。
2.2 二分法:二分法同样适用于计算立方根。
具体步骤与平方根的计算方法相似,只是运算符号和迭代的公式发生改变。
2.3 立方根的展开公式:立方根还可以通过展开公式来计算。
对于任意数x,其立方根可以展开为泰勒级数的形式。
平方根的算法
![平方根的算法](https://img.taocdn.com/s3/m/5bfdd657178884868762caaedd3383c4ba4cb442.png)
平方根的算法平方根是数学中常见的运算之一,它的意义是求一个数的正平方根。
在日常生活中,我们经常需要计算平方根,比如计算房间的面积、计算某些物品的长度等等。
而计算平方根的方法也有很多种,下面介绍几种常见的算法。
1.牛顿迭代法牛顿迭代法是一种求函数零点的方法,它可以用来计算平方根。
该方法的基本思路是:从一个初始值开始,不断迭代,直到满足精度要求为止。
具体实现步骤如下:假设要求一个数x的平方根,先猜测一个初值y;计算y的平方与x之间的差值,记作d=y^2-x;如果d的绝对值小于某个精度要求,则停止迭代,返回y;否则,更新y的值为y-d/(2*y),然后回到第二步,继续迭代。
2.二分法二分法是一种比较简单的求平方根的方法,它的基本思路是:对于一个非负实数x,它的平方根y满足0<=y<=x。
因此可以将y的取值范围二分,然后逐步缩小,直到满足精度要求为止。
具体实现步骤如下:假设要求一个数x的平方根,先确定两个值low=0和high=x;计算mid=(low+high)/2,然后计算mid的平方与x之间的差值d=mid^2-x;如果d的绝对值小于某个精度要求,则停止迭代,返回mid;否则,如果d>0,则说明mid的平方大于x,因此将high更新为mid,然后回到第二步;否则,如果d<0,则说明mid的平方小于x,因此将low更新为mid,然后回到第二步。
3.近似公式除了上述两种算法之外,还有一些近似公式可以用来计算平方根。
其中比较常见的是以下两种公式:y=(x+a/x)/2,其中a是一个常数,通常取1;y=x/2+(a/x)/2,其中a是一个常数,通常取1。
以上是几种常见的求平方根的算法,不同的算法各有优缺点,选取合适的算法需要根据具体情况来决定。
同时,在进行计算时还需要注意精度问题,避免出现误差过大的情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
快速平方根算法(1)默认分类2010-09-03 06:42:49 阅读16 评论0 字号:大中小订阅快速平方根算法在3D图形编程中,经常要求平方根或平方根的倒数,例如:求向量的长度或将向量归一化。
C数学函数库中的sqrt具有理想的精度,但对于3D游戏程式来说速度太慢。
我们希望能够在保证足够的精度的同时,进一步提高速度。
Carmack在QUAKE3中使用了下面的算法,它第一次在公众场合出现的时候,几乎震住了所有的人。
据说该算法其实并不是Carmack发明的,它真正的作者是Nvidia的Gary Tarolli(未经证实)。
//// 计算参数x的平方根的倒数//float InvSqrt (float x){float xhalf = 0.5f*x;int i = *(int*)&x;i = 0x5f3759df - (i >> 1); // 计算第一个近似根x = *(float*)&i;x = x*(1.5f - xhalf*x*x); // 牛顿迭代法return x;}该算法的本质其实就是牛顿迭代法(Newton-Raphson Method,简称NR),而NR的基础则是泰勒级数(Taylor Series)。
NR是一种求方程的近似根的方法。
首先要估计一个与方程的根比较靠近的数值,然后根据公式推算下一个更加近似的数值,不断重复直到可以获得满意的精度。
其公式如下:函数:y=f(x)其一阶导数为:y'=f'(x)则方程:f(x)=0 的第n+1个近似根为x[n+1] = x[n] - f(x[n]) / f'(x[n])NR最关键的地方在于估计第一个近似根。
如果该近似根与真根足够靠近的话,那么只需要少数几次迭代,就可以得到满意的解。
现在回过头来看看如何利用牛顿法来解决我们的问题。
求平方根的倒数,实际就是求方程1/(x^2)-a=0的解。
将该方程按牛顿迭代法的公式展开为:x[n+1]=1/2*x[n]*(3-a*x[n]*x[n])将1/2放到括号里面,就得到了上面那个函数的倒数第二行。
接着,我们要设法估计第一个近似根。
这也是上面的函数最神奇的地方。
它通过某种方法算出了一个与真根非常接近的近似根,因此它只需要使用一次迭代过程就获得了较满意的解。
它是怎样做到的呢?所有的奥妙就在于这一行:i = 0x5f3759df - (i >> 1); // 计算第一个近似根超级莫名其妙的语句,不是吗?但仔细想一下的话,还是可以理解的。
我们知道,IEEE标准下,float类型的数据在32位系统上是这样表示的(大体来说就是这样,但省略了很多细节,有兴趣可以GOOGLE):bits:31 30 031:符号位30-23:共8位,保存指数(E)22-0:共23位,保存尾数(M)所以,32位的浮点数用十进制实数表示就是:M*2^E。
开根然后倒数就是:M^(-1/2)*2^(-E/2)。
现在就十分清晰了。
语句i>>1其工作就是将指数除以2,实现2^(E/2)的部分。
而前面用一个常数减去它,目的就是得到M^(1/2)同时反转所有指数的符号。
至于那个0x5f3759df,呃,我只能说,的确是一个超级的Magic Number。
那个Magic Number是可以推导出来的,但我并不打算在这里讨论,因为实在太繁琐了。
简单来说,其原理如下:因为IEEE的浮点数中,尾数M省略了最前面的1,所以实际的尾数是1+M。
如果你在大学上数学课没有打瞌睡的话,那么当你看到(1+M)^(-1/2)这样的形式时,应该会马上联想的到它的泰勒级数展开,而该展开式的第一项就是常数。
下面给出简单的推导过程:对于实数R>0,假设其在IEEE的浮点表示中,指数为E,尾数为M,则:R^(-1/2)= (1+M)^(-1/2) * 2^(-E/2)将(1+M)^(-1/2)按泰勒级数展开,取第一项,得:原式= (1-M/2) * 2^(-E/2)= 2^(-E/2) - (M/2) * 2^(-E/2)如果不考虑指数的符号的话,(M/2)*2^(E/2)正是(R>>1),而在IEEE表示中,指数的符号只需简单地加上一个偏移即可,而式子的前半部分刚好是个常数,所以原式可以转化为:原式= C - (M/2)*2^(E/2) = C - (R>>1),其中C为常数所以只需要解方程:R^(-1/2)= (1+M)^(-1/2) * 2^(-E/2)= C - (R>>1)求出令到相对误差最小的C值就可以了上面的推导过程只是我个人的理解,并未得到证实。
而Chris Lomont则在他的论文中详细讨论了最后那个方程的解法,并尝试在实际的机器上寻找最佳的常数C。
有兴趣的朋友可以在文末找到他的论文的链接。
所以,所谓的Magic Number,并不是从N元宇宙的某个星系由于时空扭曲而掉到地球上的,而是几百年前就有的数学理论。
只要熟悉NR和泰勒级数,你我同样有能力作出类似的优化。
在上有人做过测试,该函数的相对误差约为0.177585%,速度比C标准库的sqrt提高超过20%。
如果增加一次迭代过程,相对误差可以降低到e-004 的级数,但速度也会降到和sqrt差不多。
据说在DOOM3中,Carmack通过查找表进一步优化了该算法,精度近乎完美,而且速度也比原版提高了一截(正在努力弄源码,谁有发我一份)。
值得注意的是,在Chris Lomont的演算中,理论上最优秀的常数(精度最高)是0x5f37642f,并且在实际测试中,如果只使用一次迭代的话,其效果也是最好的。
但奇怪的是,经过两次NR后,在该常数下解的精度将降低得非常厉害(天知道是怎么回事!)。
经过实际的测试,Chris Lomont认为,最优秀的常数是0x5f375a86。
如果换成64位的double版本的话,算法还是一样的,而最优常数则为0x5fe6ec85e7de30da(又一个令人冒汗的Magic Number - -b)。
这个算法依赖于浮点数的内部表示和字节顺序,所以是不具移植性的。
如果放到Mac上跑就会挂掉。
如果想具备可移植性,还是乖乖用sqrt好了。
但算法思想是通用的。
大家可以尝试推算一下相应的平方根算法。
下面给出Carmack在QUAKE3中使用的平方根算法。
Carmack已经将QUAKE3的所有源代码捐给开源了,所以大家可以放心使用,不用担心会收到律师信。
//// Carmack在QUAKE3中使用的计算平方根的函数//float CarmSqrt(float x){union{int intPart;float floatPart;} convertor;union{int intPart;float floatPart;} convertor2;convertor.floatPart = x;convertor2.floatPart = x;convertor.intPart = 0x1FBCF800 + (convertor.intPart >> 1);convertor2.intPart = 0x5f3759df - (convertor2.intPart >> 1);return 0.5f*(convertor.floatPart + (x * convertor2.floatPart));}另一个基于同样算法的更高速度的sqrt实现如下。
其只是简单地将指数除以2,并没有考虑尾数的方根。
要看懂该代码的话必须知道,在IEEE浮点数的格式中,E是由实际的指数加127得到的。
例如,如果实数是0.1234*2^10,在浮点表示中,E(第23-30位)的值其实为10+127=137。
所以下面的代码中,要处理127偏移,这就是常数0x3f800000的作用。
我没实际测试过该函数,所以对其优劣无从评论,但估计其精度应该会降低很多。
float Faster_Sqrtf(float f){float result;_asm{mov eax, fsub eax, 0x3f800000sar eax, 1add eax, 0x3f800000mov result, eax}return result;}除了基于NR的方法外,其他常见的快速算法还有多项式逼近。
下面的函数取自《3D游戏编程大师技巧》,它使用一个多项式来近似替代原来的长度方程,但我搞不清楚作者使用的公式是怎么推导出来的(如果你知道的话请告诉我,谢谢)。
//// 这个函数计算从(0,0)到(x,y)的距离,相对误差为3.5%//int FastDistance2D(int x, int y){x = abs(x);y = abs(y);int mn = MIN(x,y);return(x+y-(mn>>1)-(mn>>2)+(mn>>4));}//// 该函数计算(0,0,0)到(x,y,z)的距离,相对误差为8%//float FastDistance3D(float fx, float fy, float fz){int temp;int x,y,z;// 确保所有的值为正x = int(fabs(fx) * 1024);y = int(fabs(fy) * 1024);z = int(fabs(fz) * 1024);// 排序if (y < x) SWAP(x,y,temp)if (z < y) SWAP(y,z,temp)if (y < x) SWAP(x,y,temp)int dist = (z + 11 * (y >> 5) + (x >> 2) );return((float)(dist >> 10));}还有一种方法称为Distance Estimates(距离评估?),如下图所示:红线所描绘的正八边形上的点为:octagon(x,y) = min((1/√2) * (|x|+|y|), max(|x|,|y|))求出向量v1和v2的长度,则:√(x^2+y^2) = (|v1|+|v2|)/2 * octagon(x,y)到目前为止我们都在讨论浮点数的方根算法,接下来轮到整数的方根算法。
也许有人认为对整型数据求方根无任何意义,因为会得到类似99^(1/2)=9的结果。
通常情况下确实是这样,但当我们使用定点数的时候(定点数仍然被应用在很多系统上面,例如任天堂的GBA之类的手持设备),整数的方根算法就显得非常重要。
对整数开平方的算法如下。
我并不打算在这讨论它(事实是我也没有仔细考究,因为在短期内都不会用到- -b),但你可以在文末James Ulery的论文中找到非常详细的推导过程。