欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

通过打开根号,然后取 C 中数字的倒数来求一个数字的倒数的方法

最编程 2024-04-13 22:14:14
...

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

#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
...

运行结果:


推荐阅读