当前位置: 首页 > news >正文

平方根倒数快速算法

一、平方根倒数算法的由来

        在制作3D游戏的时候,曲面是由许多平面构成的,要求出光线在物体表面反射后的效果,就需要知道平面的单位法向量,法向量的长度的平方R很容易求出,单位法向量 = 坐标值 / R的平方根。电脑每次都要进行百万次这样的计算,每次计算节约一些时间就可以大大提高游戏的帧率。而平方根快速算法就是干这行的。

二、牛顿法

        当我们要求解2的平方根的时候,可以借助图形 y = x^2-2 当 y = 0的时候就可以算出2的平方根了。现在我们可以使用牛顿的迭代法,随便取一个在曲线上的点,求出该点的切线与y = 0的交点,此时他是更精确的借,将这个算法迭代几次你就可以找到一个近似解出来了。

        但是牛顿法有个问题,如果我开始随便找一个点,找了个100,那导致迭代次数很多次后才能慢慢达到一个较好的精度。但如果你开始就用1.414来计算,你只用一次就可以算出一个理想的高精度解。

三、平方根倒数算法

        我们只用把二进制数处理一下就可以得到牛顿法需要的初始值。

        那么首先我们要了解一下,在电脑中是如何存放二进制数的。在32位表示一个浮点数的情况下,S(1位符号位) + E(8位指数位)+M(23位尾数位)。注意尾数位指标是小数点后的数,也就是说现在的M表示0.5,加上省略的1+小数点,则表示1.5*2^E-127。 指数为如前面所述,支持正负所以要 -127。

        那么通过对数来简化指数和乘法运算。

        在式中有几个点需要提出的是

① \log (1+x) 在(0,1)之间约等于x,所以直接拿下来了。

②在二进制中*2表示左移一位,所以左移E 23位后加上23位的M正好是y在计算机中的二进制格式。

        所以我们得出结论\log y = \frac{Y}{2^{^(23)}} - 127

所以根据问题,我们需要知道y的平方根的倒数即:

将上述结论代入后得到:

        虽然做到这一步就挺好了,但是为了提高整体精度,我们似乎还可以把y = x向上提高一点,同时0x5f400000对应着381*2^22 , 同时0.5*Y也可以改成Y右移一位,毕竟我们只用找到近似解就行,后面还有牛顿算法保底呢。

四、代码

float invSqrt(float x) {float halfx = 0.5f * x;float y = x;long i = *(long*)&y;i = 0x5f3759df - (i>>1);y = *(float*)&i;y = y * (1.5f - (halfx * y * y));return y;
}

最后这个牛顿迭代的方程如下图所示来自GPT4:

参考

什么代码让程序员之神感叹“卧槽”?改变游戏行业的平方根倒数算法_哔哩哔哩_bilibili

Open source IMU and AHRS algorithms – x-io Technologies

Graphing Calculator - GeoGebra

相关文章:

平方根倒数快速算法

一、平方根倒数算法的由来 在制作3D游戏的时候,曲面是由许多平面构成的,要求出光线在物体表面反射后的效果,就需要知道平面的单位法向量,法向量的长度的平方R很容易求出,单位法向量 坐标值 / R的平方根。电脑每次都要…...

详解.vscode 下的json .vscode文件夹下各个文件的作用

1.背景 看一些开源项目的时候,总是看到vscode先有不同的json文件,再次做一下总结方便之后查看 settings.json肯定不用多说了 vscode 编辑器分为 全局用户配置 和 当前工作区配置 那么.vscode文件夹下的settings.json文件夹肯定就是当前工作区配置了 在此文件对单个的项目进行配…...

【消息队列RocketMQ】二、RocketMQ 消息发送与消费:原理与实践

一、RocketMQ 消息发送原理与模式​ 1.1 消息发送原理​ RocketMQ 消息发送的核心流程围绕 Producer、NameServer 和 Broker 展开。Producer 启动时,会向 NameServer 请求获取 Topic 的路由信息,这些信息包括 Topic 对应的 Broker 列表以及 Broker 上的…...

WPF的发展历程

文章目录 WPF的发展历程引言起源与背景(2001-2006)从Avalon到WPF设计目标与创新理念 WPF核心技术特点与架构基础架构与渲染模型关键技术特点MVVM架构模式 WPF在现代Windows开发中的地位与前景当前市场定位与其他微软UI技术的关系未来发展前景 社区贡献与…...

新书速览|OpenCV计算机视觉开发实践:基于Qt C++

《OpenCV计算机视觉开发实践:基于Qt C》 本书内容 OpenCV是计算机视觉领域的开发者必须掌握的技术。《OpenCV计算机视觉开发实践:基于Qt C》基于 OpenCV 4.10与Qt C进行编写,全面系统地介绍OpenCV的使用及实战案例,并配套提供全书示例源码、PPT课件与作…...

本地搭建一个简易版本的 Web3 服务

一、环境搭建与工具准备 (一)安装 Node.js 和 npm Node.js 是一个基于 JavaScript 的运行时环境,npm 是其默认的包管理器。在 Web3 开发中,Node.js 和 npm 是必不可少的工具。 访问 Node.js 官网 并下载最新的 LTS 版本。 安装…...

电脑安装CentOS系统

前言 电脑是Windows10系统,安装CentOS之前要将硬盘格式化,这个操作会将Windows10系统以及电脑上所有资料抹除,操作前务必谨慎复查是否有重要资料需要备份。 准备工作 准备两个U盘,一台电脑。提前把镜像下载好。镜像在百度网盘里…...

【Linux专栏】zip 多个文件不带路径

Linux && Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 今天发现 Linux 解压缩的文件中,不光包含需要的文件,还保留了目录层级,不是想要的结果。因此,本文关于…...

邀请函 | 「软件定义汽车 同星定义软件」 TOSUN用户日2025·杭州站

参会邀请函 尊敬的客户及合作伙伴: 新能源汽车智能化浪潮席卷全球,杭州作为中国技术创新高地,正引领行业变革。为助力工程师伙伴应对行业挑战,解决工程难题,同星智能将于2025年5月9日(周五)在…...

start_response详解

start_response 是Python的WSGI(Web Server Gateway Interface)中的一个重要概念,它是一个可调用对象(通常是一个函数),在WSGI应用程序里发挥着关键作用,下面为你详细介绍。 作用 在WSGI规范里…...

记一次 .NET某旅行社酒店管理系统 卡死分析

一:背景 1. 讲故事 年初有位朋友找到我,说他们的管理系统不响应了,让我帮忙看下到底咋回事? 手上也有dump,那就来分析吧。 二:为什么没有响应 1. 线程池队列有积压吗? 朋友的系统是一个web系统&#…...

[预备知识]1. 线性代数基础

线性代数基础 线性代数是深度学习的重要基础,本章节将介绍深度学习中常用的线性代数概念和操作。 1. 标量、向量、矩阵与张量 1.1 标量(Scalar) 标量是单个数值,用 x ∈ R x \in \mathbb{R} x∈R 表示。在深度学习中常用于表…...

RESTful学习笔记(二)---简单网页前后端springboot项目搭建

新建项目&#xff1a; 项目结构 Pom.xml中添加依赖&#xff1a; 要有用于启动的父进程&#xff0c;有启动依赖&#xff0c;有lombok用于自动构建getter和setter方法等 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…...

C++ AI模型部署优化实战:基于TensorRT的高效推理引擎开发

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析

在AI技术快速发展的今天&#xff0c;编程方式正在经历一场革命性的变革。从传统的"人写代码"到"AI辅助编程"&#xff0c;再到"AI自主编程"&#xff0c;开发效率得到了质的提升。Cline作为一款基于VSCode的AI编程助手&#xff0c;通过其独特的pro…...

DevOps功能详解

DevOps 详解 1. 什么是 DevOps&#xff1f; DevOps 是 Development&#xff08;开发&#xff09; 和 Operations&#xff08;运维&#xff09; 的组合词&#xff0c;代表一种通过 自动化工具、协作文化 和 流程优化 来加速软件开发与交付的 方法论。其核心目标是打破开发与运维…...

忽略 CS8616 警告在 Visual Studio 2022 中【C# 8.0 】

CS8616 警告是 C# 8.0 引入的可空引用类型(NRT)相关警告&#xff0c;表示"由于可空引用类型的特性&#xff0c;某个不可为 null 的字段可能未被初始化"。 编辑项目csproj&#xff0c;直接删除<Nullable>enable</Nullable> 或者修改为disable或者annota…...

[架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析

[架构之美]一键服务管理大师&#xff1a;Ubuntu智能服务停止与清理脚本深度解析 服务展示&#xff1a; 运行脚本&#xff1a; 剩余服务&#xff1a; 一、脚本设计背景与核心价值 在Linux服务器运维中&#xff0c;服务管理是日常操作的重要环节。本文介绍的智能服务管理脚本&a…...

23种设计模式-结构型模式之外观模式(Java版本)

Java 外观模式&#xff08;Facade Pattern&#xff09;详解 &#x1f9ed; 什么是外观模式&#xff1f; 外观模式是结构型设计模式之一&#xff0c;为子系统中的一组接口提供一个统一的高层接口&#xff0c;使得子系统更易使用。 就像是酒店前台&#xff0c;帮你处理入住、叫…...

《数据结构之美--双向链表》

引言 之前我们学习了单链表这一数据结构&#xff0c;虽然单链表的功能比较多&#xff0c;但是也存在着一些局限性&#xff0c;因为在单链表中节点的指向都是单向的&#xff0c;因此我们想从某个节点找到它的上一个节点比较困难&#xff0c;来不及再迷恋单链表了&#xff0c;接…...

如何判断设备是否支持带电插拔——从原理到实操的全面解析

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 一、带电插拔的核心原理 带电插拔&#xff08;热插拔&#xff09;的本质是通过电气隔离设计和顺序通断控制&#xff0c;避免电流突变对设备造成损害。 • 触点分级设计&#xff1a;支持热…...

Google Store 如何利用 glTF 3D 模型改变产品教育

Google 为全球广大用户提供种类繁多、持续改进的硬件产品。Google 的智能手机、智能手表、耳机、平板电脑、智能家居设备等产品均通过 Google Store(谷歌商店) 以及遍布全球的实体和数字第三方零售商销售。作为一个以在人工智能、智能家居和个人设备体验方面不断开拓创新而闻名…...

Flutter 状态管理 Riverpod

Android Studio版本 Flutter SDK 版本 将依赖项添加到您的应用 flutter pub add flutter_riverpod flutter pub add riverpod_annotation flutter pub add dev:riverpod_generator flutter pub add dev:build_runner flutter pub add dev:custom_lint flutter pub add dev:riv…...

flutter 专题 六十六 Flutter Dio包网络请求抓包解决方案

在Flutter中进行网络请求时&#xff0c;我们可以使用的库有3个&#xff0c;即Http请求库、HttpClient请求库和Dio请求库&#xff08;详细介绍请参考&#xff1a;Flutter开发之Http网络请求&#xff09;&#xff0c;使用得最多的就是Dio请求库。因为相比Http请求库和HttpClient请…...

DSL(Domain Specific Language,领域特定语言)

DSL的定义和作用 DSL是为特定业务领域设计的专门语言&#xff0c;这里特指为欺诈检测场景设计的规则描述语言通过DSL&#xff0c;业务人员可以用接近自然语言的方式定义欺诈检测规则&#xff0c;而不需要编写复杂的代码DSL的具体实现&#xff1a;使用ANTLR4作为语法解析工具支…...

基于SpringBoot的心情疗愈平台-项目分享

基于SpringBoot的心情疗愈平台-项目分享 项目介绍项目摘要管理员功能图用户实体图心理咨询师功能图系统功能图项目预览情感树洞发布帖子讲座信息心理医生心理医生管理 最后 项目介绍 使用者&#xff1a;管理员、用户、心理咨询师 开发技术&#xff1a;MySQLJavaSpringBootVue …...

富文本图片过大问题

在做若依的项目&#xff0c;碰到了若依自带的公告功能的图片上传后&#xff0c;再显示会出现图片过大的问题。在修改若依代码无果后&#xff0c;退而求其次修改展示页面的代码。 问题描述&#xff1a; 在若依框架的打卡系统中&#xff0c;公告使用富文本上传图片后&#xff0…...

Python-Django系列—部件

部件是 Django 对 HTML 输入元素的表示。部件处理 HTML 的渲染&#xff0c;以及从对应于部件的 GET&#xff0f;POST 字典中提取数据。 内置部件生成的 HTML 使用 HTML5 语法&#xff0c;目标是 <!DOCTYPE html>。例如&#xff0c;它使用布尔属性&#xff0c;如 checked…...

开发者视角:轻量便捷的AI视觉训推一体机如何实现AI模型快速开发

一、行业背景 1&#xff09;数据与算力基础夯实&#xff1a;互联网、物联网和移动互联网的普及使得视觉数据呈爆发式增长&#xff0c;为AI视觉训推技术提供了丰富的“燃料”。同时&#xff0c;GPU、TPU等计算芯片的广泛使用&#xff0c;以及云计算的兴起&#xff0c;让计算能力…...

基于Python(Django)+SQLite实现(Web)校园助手

校园助手 本校园助手采用 B/S 架构。并已将其部署到服务器上。在网址上输入 db.uplei.com 即可访问。 使用说明 可使用如下账号体验&#xff1a; 学生界面: 账号1&#xff1a;123 密码1&#xff1a;123 账户2&#xff1a;201805301348 密码2&#xff1a;1 # --------------…...

Django 入门指南:构建强大的 Web 应用程序

什么是 Django&#xff1f; Django 是一个开源的高层次 Python Web 框架&#xff0c;旨在快速开发安全且可维护的网站。它通过简化常见的 Web 开发任务&#xff0c;帮助开发者专注于开发应用的核心功能。Django 实现了“快速开发”和“尽量少的重复”的理念&#xff0c;提供了…...

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板&#xff0c;以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络&#xff0c;而宽带通信系统正在努力满…...

LangChain实现PDF中图表文本多模态数据向量化及RAG应用实战指南

如何用LangChain实现PDF多模态数据向量化及RAG应用实战指南 在大模型应用中&#xff0c;PDF文档因包含文本、表格、图片等异构数据&#xff0c;成为RAG&#xff08;检索增强生成&#xff09;系统的核心挑战。本文基于LangChain框架&#xff0c;结合多模态处理技术&#xff0c;…...

OkHttp入门

OkHttp 简介与使用示例 OkHttp 是一个高效的 HTTP 客户端&#xff0c;用于 Android、Java 应用程序以及 Kotlin 应用程序。它支持同步阻塞调用和异步调用&#xff0c;同时提供了强大的拦截器和重定向处理功能。OkHttp 由 Square 公司开发&#xff0c;因其高性能和易用性而广受…...

在ARM Linux应用层下驱动MFRC522

文章目录 1、前言2、IC卡 和 IC卡读卡器3、MFRC5223.1、寄存器集3.2、命令集3.3、数据操作3.4、基础函数编写3.4.1、MFRC522接线3.4.2、编写SPI操作函数3.4.3、编写MFRC522基础函数3.4.3.1、完整的mfrc522.h3.4.3.2、写寄存器和读寄存器3.4.3.3、复位引脚操作3.4.3.4、天线操作…...

力扣第446场周赛

有事没赶上, 赛后模拟了一下, 分享一下我的解题思路和做题感受 1.执行指令后的得分 题目链接如下&#xff1a;力扣 给你两个数组&#xff1a;instructions 和 values&#xff0c;数组的长度均为 n。 你需要根据以下规则模拟一个过程&#xff1a; 从下标 i 0 的第一个指令开始…...

close和shutdown

1.shutdown() 控制 TCP 连接的读写方向&#xff0c;不会关闭文件描述符&#xff0c;也不会触发四次挥手。 shutdown(sockfd, SHUT_RD): 关闭套接字的读方向。套接字不能再接收数据。 shutdown(sockfd, SHUT_WR): 关闭套接字的写方向。套接字不能再发送数据。 shutdown(sockfd…...

LeetCode算法题(Go语言实现)_54

题目 给你两个正整数数组 spells 和 potions &#xff0c;长度分别为 n 和 m &#xff0c;其中 spells[i] 表示第 i 个咒语的能量强度&#xff0c;potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药水的能量强度 相乘 如果 大于等于 success &a…...

.NET应用UI框架DevExpress XAF v24.2新版亮点:支持.NET 9

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在DevEx…...

前端通过jenkins和docker打包部署流程

通过jenkins实现镜像打包和上传 1.在jenkins上创建流水线任务 点击新建任务 填写任务名称 选多分支流水线 增加分支源 选git 添加并选择凭据&#xff08;有项目权限的git账号密码&#xff09; 填写分支的正则表达式&#xff0c;多分支使用^(分支名|分支名)$ 保存 …...

SpringBoot自定义验证器:企业级参数校验架构设计与实践

一、需求分析与技术选型 在复杂业务场景中,标准校验注解(如@NotBlank、@Pattern)往往无法满足特殊业务规则验证需求。例如: 需要校验字段值在预定义的枚举范围内多字段之间存在关联性校验(如起始时间不能晚于结束时间)需要动态查询数据库进行业务规则校验架构设计原则:…...

4U带屏基于DSP/ARM+FPGA+AI的电力故障录波装置设计方案,支持全国产化

4U带屏DSP/ARMFPGAAI电力故障录波分析仪&#xff0c;支持国产化&#xff0c;含有CPU主控模块&#xff0c;96路模拟量采集&#xff0c;256路开关量&#xff0c;通讯扩展卡等#电力故障录波#4U带屏#新能源#电力监测 主要特点 1&#xff09;是采用嵌入式图形系统&#xff0c;以及…...

笔试题——第五周

目录 Day1 排序子序列 消减整数 最长上升子序列 Day2 爱吃素 相差不超过k的最多数 最长公共子序列(一) Day3 小红的口罩 春游 数位染色 Day4 素数回文 活动安排 合唱团 Day5 跳台阶扩展问题 包含不超过两种字符的最长子串 字符串的排列 Day6 ISBN号码 k…...

图论-Floyd算法

在搜索中bfs只适合无权图 若是碰到有权图最简单的方法就是用邻接矩阵-二维矩阵存储每个点对之间的权重,然后用floyd 并且邻接矩阵还可以处理重边的问题&#xff08;用min&#xff09; INFfloat(inf) ma[[INF]*n for _ in range(n)]for i in range(n):ma[i][i]0for i in rang…...

使用pyinstaller打包fastapi项目的问题记录

文章目录 PyInstaller 相关介绍作用使用方式Spec 文件介绍 FastAPI 相关介绍什么是 FastAPI&#xff1f;使用方式 使用 PyInstaller 打包 FastAPI 项目常见问题与解决方案 PyInstaller 相关介绍 作用 PyInstaller 是一个将 Python 程序打包成独立可执行文件的工具&#xff0c…...

Java秒杀功能-案例

数据库表设计 CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL,password varchar(100) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;CREATE TABLE order_info (id bigint(20) NOT NULL AUTO_INCREMENT,user_id bigi…...

Abp发布订阅

在 ABP&#xff08;AspNet Boilerplate&#xff09;框架里运用发布 - 订阅模式&#xff0c;有着多方面重要目的&#xff0c;以下为你详细阐述&#xff1a; 实现组件间的解耦 减少直接依赖&#xff1a;在传统的编程方式中&#xff0c;不同组件之间可能存在紧密的耦合关系&…...

docker部署ruoyi-vue-pro前后端详细笔记

docker部署ruoyi-vue-pro前后端详细笔记 参考&#xff1a;YuDaoCloud&#xff1a;Docker 部署 - 那个码农 1.准备工作 1.1 需要准备服务器&#xff0c;安装bt面板方便操作 if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wg…...

软考中级数据库系统工程师学习资料分享

软考中级数据库系统工程师考试对于很多 IT 从业者和计算机专业的大学生来说&#xff0c;是一个重要的职业资格认证。它不仅能够提升个人的专业技能&#xff0c;还能为职业发展增添有力的砝码。今天&#xff0c;我将为大家分享一套全面且实用的学习资料&#xff0c;帮助大家更好…...

RESTful学习笔记(一)

Web发展 一、API 程序硬件接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是预先定义好的逻辑函数&#xff0c;软件系统不同组成部分衔接的约定&#xff0c;直接调用函数&#xff0c;无序访问代码细节&#xff0c;分为SDK和Web应用接口两类 SDK…...