快速求平方根,这个好牛逼
http://blog.csdn.net/yutianzuijin/article/details/40268445
首先是常规解法,二分法:
float SqrtByBisection(float n) {float low,up,mid,last; low=0,up=(n<1?1:n); mid=(low+up)/2; do{if(mid*mid>n)up=mid; else low=mid;last=mid;mid=(up+low)/2; }while(fabsf(mid-last) > eps);return mid; }
然后是牛顿迭代法。
好巧妙呀!
float SqrtByNewton(float x) {float val=x;//初始值float last;do{last = val;val =(val + x/val) / 2;}while(fabsf(val-last) > eps);return val; }
注意,初值选择很重要。
float SqrtByNewton(float x) {int temp = (((*(int *)&x)&0xff7fffff)>>1)+(64<<23);float val=*(float*)&temp;float last;do{last = val;val =(val + x/val) / 2;}while(fabsf(val-last) > eps);return val; }
一步到位,不需要迭代的,牛逼的卡马克算法。是在一段游戏代码里面的。
float SqrtByCarmack( float number ) {int i;float x2, y;const float threehalfs = 1.5F;x2 = number * 0.5F;y = number;i = * ( int * ) &y; i = 0x5f375a86 - ( i >> 1 ); y = * ( float * ) &i;y = y * ( threehalfs - ( x2 * y * y ) ); y = y * ( threehalfs - ( x2 * y * y ) ); y = y * ( threehalfs - ( x2 * y * y ) ); return number*y; }
其实一步也就可以了。
快速求平方根,这个好牛逼相关推荐
- 【学习笔记】使用魔数快速求平方根
[学习笔记]使用魔数快速求平方根 简介 介绍使用魔数0x1fbd1df5快速求平方根x{\sqrt{x}}x的C语言实现和公式的推导. 代码 float MagicSqrt(float x) {fl ...
- c语言浮点数高精度求平方根,快速高精度的二进制浮点数开平方算法
1引盲开平方运算在用徽机.单片机等构成的实时控制系统和测量仪器中有着广泛的应用.开平方运算的实现方法有多种:如牛顿迭代法.查表法.直线逼近法(线性化方法)和减奇数法等.对于查表法,当被开方数变化范围较 ...
- 牛客题霸 [求平方根] C++题解/答案
牛客题霸 [求平方根] C++题解/答案 题目描述 实现函数 int sqrt(int x). 计算并返回x的平方根 题解: 要求返回平方根,我们就找一个i,使得ii<=x&&( ...
- 数学 —— 其他 —— 快速求逆平方根
[概述] 越底层的函数,调用越频繁,那么最底层的数学运算函数的优化至关重要. 当求逆平方根时,一般做法都是用函数返回 1/sqrt(x),但在 雷神之锤3 中,有一快速求逆平方根的算法. [知识储备] ...
- 让微积分穿梭于工作与学习之间(8):我自认为牛逼的成果之四:直接用定义求反正弦函数的导数
大部分教材已经明确指出,用定义法计算稍复杂的函数的导数一般都很困难.前面给出的正切函数,由于它有和差展开式,所以虽然展开后繁琐了点,但仍然可以继续化简得到最终结果,而反三角函数则不一样了.arcsin ...
- 20年前的几行代码竟如此牛逼?惊了
最近在知乎上看到了一个话题:世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?其中有一个回答是雷神之锤3中的快速逆平方根算法,我本以为是电影中雷神3中出现的代码,就特别好奇点进去看了一下,结果真 ...
- 求平方根sqrt()函数的底层算法效率问题
我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然 ...
- 计算广告 pdf_他创业20年死磕PDF一项业务,如今上市身家76亿:所有的突然牛逼,背后都是玩命死磕...
关注 ▲粥左罗▲ 和百万互联网精英,一起向上生长 这是粥左罗的第 883 期分享 作者 l 夏未来 来源 l 粥左罗(ID:fangdushe520) 转载请联系授权(微信ID:zzlloveutoo ...
- 这段c语言代码牛逼在哪?看得我一脸懵逼!
有人说C语言是世界上最牛逼的语言,因为操作系统就是用C语言编写的,学好了C才能更好的学习其他编程语言.为此,有人分享了下面一段代码,说是很牛逼的c语言代码,看得小编一脸懵逼.大家来看看,它究竟牛在哪里 ...
最新文章
- Linq 演变的过程(delegate = Lamb = Linq)
- 关于 SAP Spartacus 的 Theme 颜色主题
- Linux下libxml2编程基础
- java中怎样调用抽象类中的非抽象方法?(对原文做修改,加入一点自己理解)
- 【leetcode】Wildcard Matching
- 从Chrome源码看JS Array的实现
- 对于xfire动态调用webservice接口
- 税控盘查看服务器设置的网站,税控盘服务器地址
- 图书馆管理系统的c语言,图书馆管理系统 c语言.doc
- 电子书城系统设计与实现
- 深度神经网络与大数据分析技术之间,有什么相互作用?
- 国威 416 电话交换机设置
- 无人机航拍全景图这些事情一定要知道
- 系统启动时启动服务器,在BOIS如何设置启动项 启动方式怎么选择
- 美丽小猪Java基础笔记02【小美女程序猿诞生日记 之 java学习笔记】
- rospy基础--001_talker_listener
- nginx 如何使用rewrite
- python人脸识别、语音合成、智能签到系统
- 中国自主研发的USB2.0 HUB芯片,即将发布CH334 和CH335工业级
- ListView的BeginUpdate()和EndUpdate()作用
热门文章
- 基于Boost::beast模块的同步WebSocket客户端
- ITK:读取DICOM系列并写入3D图像
- ITK:从二进制图像中提取最大的连接组件
- VTK:InfoVis之XGMLReader
- VTK:图片之ImageMapToColors
- VTK:图表之ColorEdges
- QDoc分组事物Grouping Things
- OpenGL Compute Shader Image Processing计算着色器图像处理的实例
- OpenGL Multiple Scissors多个剪刀的实例
- C++Binomia distribution二项分布的实现算法(附完整源码)