平方根倒数快速算法

简介: 平方根倒数快速算法

前言

2023-10-27 19:26:49

以下内容源自《平方根倒数快速算法》

仅供学习交流使用

推荐

什么代码让程序员之神感叹“卧槽”?

平方根倒数快速算法

《雷神之锤III竞技场》源代码中平方根倒数速算法如下:

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;
    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // evil floating point bit level hacking
    i  = 0x5f3759df - ( i >> 1 );               // what the fuck? 
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed
    return y;
}

背景知识

浮点数

众所周知,32位浮点数是这样存储在计算机中的:

s     E     M
[31]  [30 - 23] [22 - 0]

即:1位符号位(sign),8位指数位(exponent),23位尾数(mantissa),指数被偏置127以适应正指数和负指数,尾数不存储前导1,因此将M视为小数点右边的二进制数,因此M/223 ∈(0,1)表示的值为:

x =(-1)S(1+ M/223)2E-127

这部分内容可以在任何一本讲计算机系统的课本的前几章里找到,不再赘述。

牛顿迭代法

最后

我们都有光明的未来

祝大家考研上岸

祝大家工作顺利

祝大家得偿所愿

祝大家如愿以偿

点赞收藏关注哦

相关文章
|
6月前
|
算法 Java
算法编程(三):x 的平方根
算法编程(三):x 的平方根
65 0
|
6月前
|
算法 程序员
【算法训练-二分查找 四】【模拟二分】X的平方根
【算法训练-二分查找 四】【模拟二分】X的平方根
38 0
|
6月前
|
算法 程序员
【算法训练-链表 六】【链表查找】:链表中倒数第k个节点
【算法训练-链表 六】【链表查找】:链表中倒数第k个节点
50 0
|
26天前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
58 1
|
3月前
|
算法
【算法】二分算法——x的平方根
【算法】二分算法——x的平方根
|
3月前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
35 0
|
5月前
|
算法 Java Go
【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)
38 1
|
5月前
|
算法 C语言
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
|
6月前
|
算法 前端开发
前端算法-x 的平方根
前端算法-x 的平方根