Leetcode Sqrt(x):牛顿迭代法和Quake-III中的神奇方法
来源:互联网 发布:c语言100到200的素数 编辑:程序博客网 时间:2024/06/03 23:38
这个题目是让写一个求平方根的算法,一般可以采用牛顿迭代法,而且牛顿迭代法的实现过程也比较简单。
关于牛顿迭代法就不多介绍了,Matrix67大神有比较详细的解释:Matrix67:牛顿迭代法 ,这里我贴一下代码
int mysqrt(int x){double tmpx = x;double k = 1.0;double k0 = 0.0;while(abs(k0-k) >= 1){k0 = k;k = (k + tmpx/k)/2;}return (int)k;}
下面再贴一下Quake-III中的神奇解法:
int mysqrt(int x){float tmpx = (float)x;float xhalf = 0.5f*tmpx;int i = *(int*)&tmpx;i = 0x5f375a86 - (i >> 1);tmpx = *(float*) & i;tmpx = tmpx * (1.5f - xhalf*tmpx*tmpx);tmpx = tmpx * (1.5f - xhalf*tmpx*tmpx);int res = (int)(1.0/tmpx);if((res+1) * (res + 1) <= x)res += 1;return res;}
注:第二种解法由于存在精度问题,所以不适合解这道题目,但是它的速度确实很快,只需一次迭代即可。
0 0
- Leetcode Sqrt(x):牛顿迭代法和Quake-III中的神奇方法
- 【leetcode】:leetcode 69 Sqrt(x) 牛顿迭代法
- LeetCode *** 69. Sqrt(x) 牛顿迭代法
- LeetCode 69: Sqrt(x) 求根号x(牛顿迭代法和二分查找法)
- Sqrt(x) ,二分法,牛顿迭代法
- leetcode:Sqrt(x) 牛顿迭代法求整数开方
- Quake-III原代码里的神奇的浮点sqrt()函数
- leetcode 69. Sqrt(x)(C语言,牛顿迭代法求开方问题)46
- Quake III求1/sqrt()
- 二分法、牛顿迭代法求sqrt()
- 牛顿迭代法实现平方根函数sqrt
- sqrt函数实现--牛顿迭代法(重点)
- leetcode 69. Sqrt(x) 牛顿法求平方根
- 二分法和牛顿迭代法
- 69 Sqrt(x)_二分查找与牛顿方法
- leetCode 69.Sqrt(x) (平方根) 解题思路和方法
- 求平方根的方法(牛顿迭代法和二分法)
- Quake-III代码里神奇的浮点开方函数
- 2173: 整数的lqp拆分
- Python中的random模块棺
- 精通安卓性能优化-第四章(四)
- <IQ题>最少次数找出有质量问题的球
- Oracle基础
- Leetcode Sqrt(x):牛顿迭代法和Quake-III中的神奇方法
- 处理jquery版本之间冲突俟
- 1024. 科学计数法 (20)
- Stanford ML - Linear regression with multiple variables 多变量线性回归
- CScrollBar 滚动条操作
- 将oracle数据库由未归档模式更改为归档模式
- win&Linux系统下重置MySQL密码纠
- TrueCrypt“猝死”引发混乱,安全大牛推荐PGPDisk
- 线段树 --- 单点更新,维护区间和,模板