开发者社区> morixinguan> 正文

用C语言将一个数开根号后再取倒数的方法

简介:
+关注继续查看

在上学的时候,曾经看过有人写过这样的算法,就是将一个数开根号后再取倒数的算法,我本人也觉得十分巧妙,于是就将它积累了下来,让我们来看看是怎么回事:

#include <stdio.h>
#include <stdlib.h>
float mysqrt(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;  
}  

int main(void)
{
	float x = 2.5 ;
	float ret = mysqrt(x);
	printf("%f\n",ret);
	return 0 ;
}

它的作用是将一个数开平方并取倒,经测试这段代码比(float)(1.0/sqrt(x))快4倍
算法的原理其实不复杂,就是牛顿迭代法,用x-f(x)/f'(x)来不断的逼近f(x)=a的根。
简单来说比如求平方根,f(x)=x^2=a ,f'(x)= 2*x,f(x)/f'(x)=x/2,把f(x)代入x-f(x)/f'(x)后有(x+a/x)/2,现在我们选a=5,选一个猜测值比如2,那么我们可以这么算
 
5/2 = 2.5;
(2.5+2)/2 = 2.25;
5/2.25 = xxx;
(2.25+xxx)/2 = xxxx
...

运行结果:


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C语言及算法设计课程实验五:循环结构程序设计
C语言及算法设计课程实验五:循环结构程序设计
16 0
C语言及算法设计课程实验四:选择结构程序设计(下)
C语言及算法设计课程实验四:选择结构程序设计(下)
56 0
C语言及算法设计课程实验四:选择结构程序设计(上)
C语言及算法设计课程实验四:选择结构程序设计(上)
69 0
C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(四)
C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(四)
36 0
C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(三)
C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(三)
29 0
C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(二)
C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计(二)
56 0
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
C语言程序设计教程任务;初步认识C语言,携君之手,步入编程之路。
38 0
[C语言学习]C语言程序设计基础(三)
[C语言学习]C语言程序设计基础(三)
32 0
[C语言学习]C语言程序设计基础(二)
[C语言学习]C语言程序设计基础(二)
38 0
[C语言学习]C语言程序设计基础(一)
[C语言学习]C语言程序设计基础(一)
77 0
+关注
morixinguan
ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载