平方根表及算法
平方根的运算法则
平方根的运算法则平方根,在数学的世界里是一个常见而又重要的概念。
它在代数、几何、物理等众多领域都有着广泛的应用。
要想熟练掌握和运用平方根,了解其运算法则是必不可少的。
首先,咱们得明确什么是平方根。
如果一个数的平方等于 a ,那么这个数就叫做 a 的平方根。
比如, 3 的平方是 9 ,所以 3 是 9 的平方根;同样,-3 的平方也是 9 ,所以-3 也是 9 的平方根。
也就是说,9 的平方根有两个,分别是 3 和-3 。
通常用符号“ ± ”来表示正负两个平方根,所以 9 的平方根可以写作 ± 3 。
接下来,咱们说说平方根的基本运算法则。
加法运算:两个平方根相加,比如√ 4 +√ 9 ,先求出每个平方根的值,√ 4 = 2 ,√ 9 = 3 ,所以√ 4 +√ 9 = 2 + 3 = 5 。
但要注意,如果被开方数不同,是不能直接将平方根相加的,比如√ 2 +√ 3 ,就不能直接得出结果。
减法运算:和加法类似,先求出每个平方根的值,然后再相减。
比如√ 16 √ 9 ,√ 16 = 4 ,√ 9 = 3 ,所以√ 16 √ 9 = 4 3 = 1 。
同样,如果被开方数不同,不能直接相减。
乘法运算:√ a × √ b =√ ( a × b )。
例如,√ 2 × √ 3 =√ ( 2 ×3 )=√ 6 。
但要注意,只有当 a 、 b 都为非负数时,这个法则才成立。
除法运算:√ a ÷ √ b =√ ( a ÷ b )(b ≠ 0 )。
比如,√ 8 ÷ √ 2 =√ ( 8 ÷ 2 )=√ 4 = 2 。
还有一个重要的法则是:(√ a )²= a (a ≥ 0 )。
这意味着,一个非负数的平方根再平方,就等于这个数本身。
在进行平方根运算时,我们还需要注意一些特殊情况。
当被开方数是负数时,在实数范围内,平方根是不存在的。
常用的平方根表立方根表
常用的平方根表立方根表在数学的世界里,平方根和立方根是非常重要的概念。
它们在各种数学计算、科学研究以及实际生活中都有着广泛的应用。
为了方便计算和查询,人们常常会编制平方根表和立方根表。
平方根,简单来说,就是一个数的平方等于另一个数,那么这个数就是另一个数的平方根。
例如,2 的平方是 4,所以 2 是 4 的平方根。
同时,因为(-2) 的平方也是 4,所以-2 也是 4 的平方根。
一个正数有两个平方根,它们互为相反数;0 的平方根是 0;负数在实数范围内没有平方根。
立方根则是指一个数的立方等于另一个数,那么这个数就是另一个数的立方根。
比如,2 的立方是 8,所以 2 是 8 的立方根。
与平方根不同的是,任何实数都有唯一的一个立方根。
平方根表通常列出了从 1 到某个较大整数的平方根的值。
以常见的平方根表为例,它会依次给出 1 到 100 这些整数的平方根。
比如,1 的平方根是 1,4 的平方根是 2,9 的平方根是 3 等等。
在实际使用中,如果我们要计算一个不是整数的数的平方根,比如 25 的平方根,我们可以先找到最接近 25 的两个整数的平方根,然后通过插值的方法来估算。
立方根表的编制方式与平方根表类似,也是列出从 1 到一定整数的立方根的值。
比如,1 的立方根是 1,8 的立方根是 2,27 的立方根是3 等等。
那么,这些平方根表和立方根表在哪些方面有用呢?在数学计算中,它们可以大大提高计算速度和准确性。
特别是在一些复杂的计算中,如果需要多次用到某个数的平方根或立方根,直接从表中查找可以节省时间,避免繁琐的计算过程。
在科学研究中,平方根和立方根的概念经常出现。
比如在物理学中,计算物体的速度、加速度等常常会涉及到平方根;在化学中,计算物质的密度、体积等可能会用到立方根。
有了平方根表和立方根表,科学家们可以更高效地进行数据处理和分析。
在工程领域,如建筑、机械制造等,也经常需要用到平方根和立方根的计算。
初中生背平方根表1-100
初中生背平方根表1-100
平方根在数学中是一个重要的概念,对初中生来说,背诵平方根表可以帮助他
们快速计算一些常见数的平方根,从而提高计算的效率。
下面是初中生背诵平方根表1-100的方法。
一、平方根的概念
在数学中,一个数的平方根是指另一个数,使得这个数的平方等于该数。
比如,4的平方根是2,因为2的平方等于4。
二、背诵平方根表1-100的方法
1.从1到10的数字,先背诵其平方根,依次是1、1.41、1.73、2、
2.24、2.45、2.65、2.83、3、
3.16。
2.对于10的倍数,如20、30、40等,可以根据已背诵的数字以及倍
数的关系进行计算。
3.对于其他数字,可以估算其平方根值,找到最接近的已知平方根,进
行修正。
4.制作一个平方根表格,将1-100的数字与其平方根对应起来,方便
查阅。
三、背诵平方根表的意义
1.通过背诵平方根表,可以提高初中生的计算速度和准确性。
2.平方根表可以帮助初中生更好地理解数学知识,巩固数学基础。
3.背诵平方根表可以锻炼初中生的记忆力和逻辑思维能力。
四、总结
初中生背诵平方根表1-100对他们的数学学习有着积极的影响,可以提高他们
的计算效率,加深对数学知识的理解。
希望通过不断的练习和巩固,初中生能够掌握更多数学知识,取得更好的成绩。
以上是初中生背诵平方根表1-100的方法,希朥对初中生的数学学习有所帮助。
【数学知识点】数学平方根口诀表
【数学知识点】数学平方根口诀表1.平方根口诀表负数方根不能行,零取方根仍为零。
正数方根有两个,符号相反值相同。
2作根指可省略,其它务必要写明。
负数只有奇次根,算术方根零或正。
2.1到20的平方数口诀表1²=1、2²=4、3²=9、4²=16、5²=25、6²=36、7²=49、8²=64、9²=81、10²=100、11²=121、12²=144、13²=169、14²=196、15²=225、16²=256、17²=289、18²=324、19²=361、20²=400。
①一个正数如果有平方根,那么必定有两个,它们互为相反数。
显然,如果我们知道了这两个平方根的一个,那么就可以及时的根据相反数的概念得到它的另一个平方根。
②如果一个正数x的平方等于a,即x的平方等于a,那么这个正数x叫做a的算术平方根。
a的算术平方根记为,读作“根号a”,a叫做被开方数。
③规定:0的平方根是0。
④负数在实数范围内不能开平方,只有在复数范围内,才可以开平方根。
例如:-1的平方根为±1,-9的平方根为±3。
⑤平方根包含了算术平方根,算术平方根是平方根中的一种。
平方根和算术平方根都只有非负数才有。
被开方数是乘方运算里的幂。
求平方根可通过逆运算平方来求。
开平方:求一个非负数a的平方根的运算叫做开平方,其中a叫做被开方数。
若x的平方等于a,那么x就叫做a的平方根,即正负根号a=正负x。
感谢您的阅读,祝您生活愉快。
平方根表及算法
平方根表及算法平方根97计算方法一:我们用a来表示A的平方根,方程x-a=0的解就为A的平方根a。
两边平方后有:x*x-2ax+A=0,因为x不等于0,两边除以x有:x-2a+A/x=0、a=(x+A/x)/2所以你只需设置一个约等于(x+A/x)/2的初始值,代入上面公式,可以得到一个更加近似的值。
再将它代入,又可以得到一个更加精确的值……依此方法,最后得到一个足够精度的(x+A/x)/2的值即为A的平方根值。
真的是这样吗?假设我们代入的值x﹤a 由于这里考虑a﹥0故:x*x﹤a*a 即x ﹤A/x(x+A/x)/2﹥(x+x)/2 即(x+A/x)/2>x即当代入的x﹤a时(x+A/x)/2的值将比x大。
同样可以证明当代入的x﹥a时(x+A/x)/2的值将比x小。
这样随着计算次数的增加,(x+A/x)/2的值就越来越接近a的值了。
如:计算sqrt(5)设初值为x = 2第一次计算:(2+5/2)/2=2.25第二次计算:(2.25+5/2.25)/2=2.236111第三次计算:(2.236111+5/2.236111)/2=2.236068这三步所得的结果和5 的平方根值相差已经小于0.001 了。
计算方法二:我们可以使用二分法来计算平方根。
设f(x)=x*x - A同样设置a为A的平方根,哪么a就是f(x)=0的根。
你可以先找两个正值m,n使f(m)<0,f(n)>0根据函数的单调性,a就在区间(m,n)间。
然后计算(m+n)/2,计算f((m+n)/2),如果它大于零,那么a就在区间(m,(m+n)/2)之间。
小于零,就在((m+n)/2,n)之间,如果等于零,那么(m+n)/2当然就是a。
这样重复几次,你可以把a存在的范围一步步缩小,在最后足够精确的区间内随便取一个值,它就约等于a。
计算方法三:以上的方法都不是很直接,在上世纪80年代的初中数学书上,都还在介绍一种比较直接的计算方法:(1)如求54756的算术平方根时先由个位向左两位两位地定位:定位为5,47,56,接着象一般除法那样列出除式.(2)先从最高位用最大平方数试商:最大平方数不超过5的是2,得商后,除式5-4后得1。
平方根和立方根知识点总结
平方根和立方根知识点总结一、平方根1、定义如果一个数的平方等于 a,那么这个数叫做 a 的平方根。
即如果 x²= a,那么 x 叫做 a 的平方根。
例如,因为 2²= 4,(-2)²= 4,所以 4 的平方根是 2 和-2。
2、表示方法一个正数 a 的平方根记作“±√a”,读作“正负根号a”,其中“√”叫做二次根号,a 叫做被开方数。
例如,9 的平方根记作±√9 = ±3。
3、性质(1)正数有两个平方根,它们互为相反数。
比如 25 的平方根是±5,5 和-5 互为相反数。
(2)0 的平方根是 0。
(3)负数没有平方根。
因为任何数的平方都是非负数,所以负数不存在平方根。
4、开平方求一个数 a 的平方根的运算叫做开平方,其中 a 叫做被开方数。
开平方与平方互为逆运算。
例如,因为(±8)²= 64,所以 64 的平方根是±8,即±√64 = ±8,对 64 开平方得到±8。
5、算术平方根正数 a 的正的平方根叫做 a 的算术平方根,记作“√a”。
例如,9 的算术平方根是 3,记作√9 = 3。
0 的算术平方根是 0。
6、平方根的估值对于一些非完全平方数的平方根,可以通过估算来确定其大致范围。
例如,估算√11 的值。
因为 9 < 11 < 16,所以 3 <√11 < 4。
又因为 11 更接近 9,所以√11 更接近 3,比如 33 左右。
二、立方根1、定义如果一个数的立方等于 a,那么这个数叫做 a 的立方根。
即如果 x³= a,那么 x 叫做 a 的立方根。
例如,因为 2³= 8,所以 8 的立方根是 2。
2、表示方法数 a 的立方根记作“³√a”,读作“三次根号a”。
例如,27 的立方根记作³√27 = 3。
3、性质(1)正数的立方根是正数。
1到100的开平方根表
1到100的开平方根表 1的平方根是1。
2的平方根是1.414。
3的平方根是1.732。
4的平方根是2。
5的平方根是2.236。
6的平方根是2.449。
7的平方根是2.646。
8的平方根是2.828。
9的平方根是3。
10的平方根是3.162。
11的平方根是3.317。
12的平方根是3.464。
13的平方根是3.606。
14的平方根是3.742。
15的平方根是3.873。
16的平方根是4。
17的平方根是4.123。
18的平方根是4.243。
19的平方根是4.359。
20的平方根是4.472。
21的平方根是4.583。
22的平方根是4.69。
23的平方根是4.796。
24的平方根是4.899。
25的平方根是5。
26的平方根是5.099。
27的平方根是5.196。
28的平方根是5.292。
29的平方根是5.385。
30的平方根是5.477。
31的平方根是5.568。
32的平方根是5.657。
33的平方根是5.745。
34的平方根是5.831。
35的平方根是5.916。
36的平方根是6。
37的平方根是6.083。
38的平方根是6.164。
39的平方根是6.245。
40的平方根是6.325。
41的平方根是6.403。
42的平方根是6.481。
43的平方根是6.557。
44的平方根是6.633。
45的平方根是6.708。
46的平方根是6.782。
47的平方根是6.855。
48的平方根是6.928。
49的平方根是7。
50的平方根是7.071。
51的平方根是7.141。
52的平方根是7.211。
53的平方根是7.28。
54的平方根是7.348。
55的平方根是7.416。
56的平方根是7.483。
57的平方根是7.549。
58的平方根是7.615。
59的平方根是7.681。
60的平方根是7.746。
61的平方根是7.81。
62的平方根是7.874。
常用的平方根表立方根表
常用的平方根表立方根表在数学的世界里,平方根和立方根是非常重要的概念。
它们在各种数学计算、科学研究以及实际生活中都有着广泛的应用。
为了方便计算和查询,人们常常会编制平方根表和立方根表。
平方根,简单来说,就是一个数的平方等于另一个数,那么这个数就是另一个数的平方根。
例如,因为 2 的平方等于 4,所以 2 是 4 的平方根。
同时,-2 也是 4 的平方根,因为(-2) 的平方也等于 4。
正数有两个平方根,它们互为相反数;0 的平方根是 0;负数在实数范围内没有平方根。
立方根则是一个数的立方等于另一个数,那么这个数就是另一个数的立方根。
比如,因为 2 的立方等于 8,所以 2 是 8 的立方根。
与平方根不同的是,任何实数都有唯一的立方根。
平方根表通常列出了从 1 到一定数值(比如 1000)的整数的平方根。
以常见的平方根表为例,它会按照数字的顺序依次列出每个数的平方根。
例如,1 的平方根是 1,2 的平方根约为 1414,3 的平方根约为1732 等等。
这些数值都是经过精确计算得出的,为我们在计算中提供了极大的便利。
立方根表的形式与平方根表类似,也是按照数字顺序列出一定范围内整数的立方根。
比如 1 的立方根是 1,2 的立方根约为 1260,3 的立方根约为 1442 等等。
那么,这些平方根表和立方根表在哪些方面能帮助我们呢?首先,在数学计算中,如果我们需要频繁计算某个数的平方根或立方根,直接查询表格可以节省大量的计算时间。
特别是在一些复杂的数学问题中,快速准确地获取平方根和立方根的值能够提高解题的效率。
其次,在科学研究和工程领域,很多数据的处理和分析都涉及到平方根和立方根的计算。
例如,物理学中的力学、电学计算,化学中的浓度计算,以及工程学中的结构设计等。
有了平方根表和立方根表,科研人员和工程师们可以更快速地得到准确的结果,从而推进研究和项目的进展。
在日常生活中,平方根和立方根的应用也不少。
比如在建筑施工中,计算房间的面积、体积时就可能用到;在制定预算时,计算成本的平方根或立方根来评估价格的合理性等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
近期看张开川的那个Ruby学习文档的7.2节的知识就从网上查询了一下,分享上来好久没用到过平方根之类的了,其实平方根算法也不怎么复杂的。
(武汉火麒麟)==================================平方根97计算方法一:我们用a来表示A的平方根,方程x-a=0的解就为A的平方根a。
两边平方后有:x*x-2ax+A=0,因为x不等于0,两边除以x有:x-2a+A/x=0、a=(x+A/x)/2所以你只需设置一个约等于(x+A/x)/2的初始值,代入上面公式,可以得到一个更加近似的值。
再将它代入,又可以得到一个更加精确的值……依此方法,最后得到一个足够精度的(x+A/x)/2的值即为A的平方根值。
真的是这样吗?假设我们代入的值x﹤a 由于这里考虑a﹥0故:x*x﹤a*a 即x ﹤A/x(x+A/x)/2﹥(x+x)/2 即(x+A/x)/2>x即当代入的x﹤a时(x+A/x)/2的值将比x大。
同样可以证明当代入的x﹥a时(x+A/x)/2的值将比x小。
这样随着计算次数的增加,(x+A/x)/2的值就越来越接近a的值了。
如:计算sqrt(5)设初值为x = 2第一次计算:(2+5/2)/2=2.25第二次计算:(2.25+5/2.25)/2=2.236111第三次计算:(2.236111+5/2.236111)/2=2.236068这三步所得的结果和5 的平方根值相差已经小于0.001 了。
计算方法二:我们可以使用二分法来计算平方根。
设f(x)=x*x - A同样设置a为A的平方根,哪么a就是f(x)=0的根。
你可以先找两个正值m,n使f(m)<0,f(n)>0根据函数的单调性,a就在区间(m,n)间。
然后计算(m+n)/2,计算f((m+n)/2),如果它大于零,那么a就在区间(m,(m+n)/2)之间。
小于零,就在((m+n)/2,n)之间,如果等于零,那么(m+n)/2当然就是a。
这样重复几次,你可以把a存在的范围一步步缩小,在最后足够精确的区间内随便取一个值,它就约等于a。
计算方法三:以上的方法都不是很直接,在上世纪80年代的初中数学书上,都还在介绍一种比较直接的计算方法:(1)如求54756的算术平方根时先由个位向左两位两位地定位:定位为5,47,56,接着象一般除法那样列出除式.(2)先从最高位用最大平方数试商:最大平方数不超过5的是2,得商后,除式5-4后得1。
把商2写上除式上。
(3)加上下一位的数:得147。
(4)用20去乘商后去试商147:2×20=40 这40可试商为3,那就把试商的3加上4 0去除147。
得147÷43=3,把3写上除式上。
这时147-129=18。
(5)加上下一位的数:得1856。
(6)用20去乘商后去试商1856:23×20=460 这460可试商为4,那就把试商的4加到460去除1856。
得4,把4写上除式上。
这时1856-1856=0,无余数啦。
(7)这时除式上的商是234,即是54756的平方根。
哪么这种计算方法是怎么得来的呢?查找了好久都没有找到答案。
静下心来仔细分平方根的计算过程,后来的步骤都有20乘以也有的商再加上预计的商乘上预计的商。
设也有的商为a预计的商为b就是(20*a+b)*b即20ab+b*b。
而实质上预计的商是平方根中已有的商的后一位数字,平方根实际为10a+b再乘以10的N次方(N为整数),这里我们可以简化为平方根为10a+b(因为乘10的N次方只影响平方的小数点位置,对数字计算没有影响)。
这下终于明白了,设a为A的平方根的前n位,b为A的平方根的n位后面的数字,哪么(10a+b)就是A的平方根。
有:(10a+b)(10a+b)=100a*a+20ab+b*b= A变形后:(20a+b)b=A-100a*a上面的计算中第一次商2,然后从结果中减4实质就是A-100a*a第二次再预计商3再减去(20*2+3)*3实质就是:A-100a*a-20ab-b*b即:A-(10a+b)(10a+b)此时10a+b看作为新的已有商a,再求下一个b值。
这样就可以一位一位地进行平方根的求解了。
==================================快速平方根算法Algorithm 2008-04-19 16:17:38在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 = 0×5f3759df - (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位系统上是这样表示的(大体来说就是这样,但省略了很多细节,有兴趣可以BAIDU):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)同时反转所有指数的符号。
至于那个0×5f3759df,呃,我只能说,的确是一个超级的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 的演算中,理论上最优秀的常数(精度最高)是0×5f37642f,并且在实际测试中,如果只使用一次迭代的话,其效果也是最好的。
但奇怪的是,经过两次 NR后,在该常数下解的精度将降低得非常厉害(天知道是怎么回事!)。
经过实际的测试,Chris Lomont 认为,最优秀的常数是 0×5f375a86。
如果换成64位的double版本的话,算法还是一样的,而最优常数则为 0×5fe6ec85e7de30da(又一个令人冒汗的Magic Number - -b)。
这个算法依赖于浮点数的内部表示和字节顺序,所以是不具移植性的。
如果放到Mac上跑就会挂掉。
如果想具备可移植性,还是乖乖用sqrt好了。
但算法思想是通用的。
大家可以尝试推算一下相应的平方根算法。
下面给出Carmack在QUAKE3中使用的平方根算法。
Carmack已经将QUAKE3的所有源代码捐给开源了,所以大家可以放心使用,不用担心会收到律师信。