用C语言将一个数开根号后再取倒数的方法
来源:互联网 发布:unity3d ugui官方demo 编辑:程序博客网 时间:2024/06/03 01:22
在上学的时候,曾经看过有人写过这样的算法,就是将一个数开根号后再取倒数的算法,我本人也觉得十分巧妙,于是就将它积累了下来,让我们来看看是怎么回事:
#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
...
运行结果:
0 0
- 用C语言将一个数开根号后再取倒数的方法
- 自写的一个开根号(开方)程序 c语言
- 使用java语言写出一个给定一个数的倒数
- 用java写出一个数的倒数
- 求一个数的倒数
- 任意数开根号的代码
- 用C语言编写一个程序将输入的十进制数转化成16进制?
- C语言用异或的方法将两个数的值互换
- 用c语言实现输入一个十进制数,计算其转换为二进制数后其中包含1的个数
- 笔试题:求一个数的开方,如根号2
- C语言 - 将任意一个数的奇数位逆序,组成新数
- 【c语言】多种方法:将十进制数转化成二进制数,计算其中1的个数
- C语言基础 输入一个字符串,用指针的方法将小写字母变成大写字母
- 实现一个栈操作,将1~12月的英文单词压入栈中,然后再取出
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回...
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
- ionic slide-box等元素使用
- 程序员瑞士军刀之 Fabric
- IOS Apps 开发(Swift)(6)——Implement a Custom Control(1)
- 手把手教你做开源项目MyMeiZi 一( RxJava + Retrofit)
- Exception in thread "main" java.lang.StackOverflowError!
- 用C语言将一个数开根号后再取倒数的方法
- ios-基础用法之【8】-pch文件配置
- 【JAVA】20、方法的定义
- ZSC 1114 又见二进制 (递归)
- RunLoop在项目中的应用
- Jenkins+RobotFramework持续集成测试-jenkins环境搭建
- leetcode-4-Median of Two Sorted Arrays
- 51单片机入门之七:按键检测
- 【机房重构】——视图