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;
}

其实一步也就可以了。

快速求平方根,这个好牛逼相关推荐

  1. 【学习笔记】使用魔数快速求平方根

    [学习笔记]使用魔数快速求平方根 简介 介绍使用魔数0x1fbd1df5快速求平方根x{\sqrt{x}}x​的C语言实现和公式的推导. 代码 float MagicSqrt(float x) {fl ...

  2. c语言浮点数高精度求平方根,快速高精度的二进制浮点数开平方算法

    1引盲开平方运算在用徽机.单片机等构成的实时控制系统和测量仪器中有着广泛的应用.开平方运算的实现方法有多种:如牛顿迭代法.查表法.直线逼近法(线性化方法)和减奇数法等.对于查表法,当被开方数变化范围较 ...

  3. 牛客题霸 [求平方根] C++题解/答案

    牛客题霸 [求平方根] C++题解/答案 题目描述 实现函数 int sqrt(int x). 计算并返回x的平方根 题解: 要求返回平方根,我们就找一个i,使得ii<=x&&( ...

  4. 数学 —— 其他 —— 快速求逆平方根

    [概述] 越底层的函数,调用越频繁,那么最底层的数学运算函数的优化至关重要. 当求逆平方根时,一般做法都是用函数返回 1/sqrt(x),但在 雷神之锤3 中,有一快速求逆平方根的算法. [知识储备] ...

  5. 让微积分穿梭于工作与学习之间(8):我自认为牛逼的成果之四:直接用定义求反正弦函数的导数

    大部分教材已经明确指出,用定义法计算稍复杂的函数的导数一般都很困难.前面给出的正切函数,由于它有和差展开式,所以虽然展开后繁琐了点,但仍然可以继续化简得到最终结果,而反三角函数则不一样了.arcsin ...

  6. 20年前的几行代码竟如此牛逼?惊了

    最近在知乎上看到了一个话题:世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?其中有一个回答是雷神之锤3中的快速逆平方根算法,我本以为是电影中雷神3中出现的代码,就特别好奇点进去看了一下,结果真 ...

  7. 求平方根sqrt()函数的底层算法效率问题

    我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然 ...

  8. 计算广告 pdf_他创业20年死磕PDF一项业务,如今上市身家76亿:所有的突然牛逼,背后都是玩命死磕...

    关注 ▲粥左罗▲ 和百万互联网精英,一起向上生长 这是粥左罗的第 883 期分享 作者 l 夏未来 来源 l 粥左罗(ID:fangdushe520) 转载请联系授权(微信ID:zzlloveutoo ...

  9. 这段c语言代码牛逼在哪?看得我一脸懵逼!

    有人说C语言是世界上最牛逼的语言,因为操作系统就是用C语言编写的,学好了C才能更好的学习其他编程语言.为此,有人分享了下面一段代码,说是很牛逼的c语言代码,看得小编一脸懵逼.大家来看看,它究竟牛在哪里 ...

最新文章

  1. Linq 演变的过程(delegate = Lamb = Linq)
  2. 关于 SAP Spartacus 的 Theme 颜色主题
  3. Linux下libxml2编程基础
  4. java中怎样调用抽象类中的非抽象方法?(对原文做修改,加入一点自己理解)
  5. 【leetcode】Wildcard Matching
  6. 从Chrome源码看JS Array的实现
  7. 对于xfire动态调用webservice接口
  8. 税控盘查看服务器设置的网站,税控盘服务器地址
  9. 图书馆管理系统的c语言,图书馆管理系统 c语言.doc
  10. 电子书城系统设计与实现
  11. 深度神经网络与大数据分析技术之间,有什么相互作用?
  12. 国威 416 电话交换机设置
  13. 无人机航拍全景图这些事情一定要知道
  14. 系统启动时启动服务器,在BOIS如何设置启动项 启动方式怎么选择
  15. 美丽小猪Java基础笔记02【小美女程序猿诞生日记 之 java学习笔记】
  16. rospy基础--001_talker_listener
  17. nginx 如何使用rewrite
  18. python人脸识别、语音合成、智能签到系统
  19. 中国自主研发的USB2.0 HUB芯片,即将发布CH334 和CH335工业级
  20. ListView的BeginUpdate()和EndUpdate()作用

热门文章

  1. 基于Boost::beast模块的同步WebSocket客户端
  2. ITK:读取DICOM系列并写入3D图像
  3. ITK:从二进制图像中提取最大的连接组件
  4. VTK:InfoVis之XGMLReader
  5. VTK:图片之ImageMapToColors
  6. VTK:图表之ColorEdges
  7. QDoc分组事物Grouping Things
  8. OpenGL Compute Shader Image Processing计算着色器图像处理的实例
  9. OpenGL Multiple Scissors多个剪刀的实例
  10. C++Binomia distribution二项分布的实现算法(附完整源码)