【Unity】什么是定点数?定点数的实现原理(个人复习笔记/侵删/不足之处欢迎斧正)

什么是定点数?定点数的实现原理

什么是定点数?

约定计算机中小数点的位置,且这个位置固定不变,小数点前、后的数字,分别用二进制表示,然后组合起来就可以把这个数字在计算机中存储起来,这种表示方式叫做「定点」表示法,用这种方法表示的数字叫做「定点数」。

什么是定点数?-CSDN博客

在使用帧同步开发中,如果不使用定点数而采用浮点数,会出现各种而样的问题(浮点误差)

真正使用定点数时,基本保留0位小数,完全使用整形数据,误差最小

定点数实现机制?

1.小数定位法:

        固定浮点数的小数点,比如保留一位保留两位,这样会接近真实值。可以进行加减计算,但是涉及到复杂乘除运算时弊端就会暴露,差生了更多的小数

2.乘法放大入整法:

        通过确定放大因子,然后转为整数,之后计算变为完全整数的运算,最后在渲染层需要渲染时除去放大因子,交由渲染层去渲染。但是细节容易出现疏漏,可能会丢失精度

3.位移运算入整法(推荐):

        位移运算只能用于整型数值,因此比较适合在定点数中,位移运算满足二次幂运算,效率较高,速度快。

        如何实现:提前准备一个放大因子,在非定点数类型转为定点数时,左移放大因子

《帧同步定点数》定点数原理和无损精度的实现方式_帧同步 定点数-CSDN博客

移位运算为什么更快?

因为移位指令占2个机器周期,而乘除法指令占4个机器周期。
计算机cpu的移位指令一般单周期就能执行完毕,而其他的指令比如乘法或除法指令都是多周期指令,所以节省了运行时间,导致效率更高的结果。

注意事项?

定点数转换为浮点数之后,浮点数就不应该再参与到帧同步的运算之中。可以说,帧同步的计算不需要转换为浮点数,只有把结果交给UI表现时,才需要转换为浮点数

VINT

using System;[Serializable]
public struct VInt:IComparable<VInt>
{private long i;//位移计数const int FIX_MULTIPLE = 1024;public static readonly VInt one = new VInt((long)FIX_MULTIPLE);public int Int { get { return (int)i; } }public float RawFloat { get { return (float)this.i * 1.0f / FIX_MULTIPLE; } }public int RawInt { get { return (int)i / FIX_MULTIPLE; } }private VInt(long i){this.i = i;}public VInt(int i){this.i = i * FIX_MULTIPLE;}public VInt(float f){this.i = (int)Math.Round((double)(f * 1.0f * FIX_MULTIPLE));}public override bool Equals(object o){if (o == null){return false;}VInt vInt = (VInt)o;return this.i == vInt.i;}public override int GetHashCode(){return this.i.GetHashCode();}public static VInt Min(VInt a, VInt b){return new VInt(Math.Min(a.i, b.i));}public static VInt Max(VInt a, VInt b){return new VInt(Math.Max(a.i, b.i));}public override string ToString(){return this.RawFloat.ToString();}public int CompareTo(VInt other){return i.CompareTo(other.i);}public static explicit operator VInt(float f){return new VInt((int)Math.Round((double)(f * 1.0f * FIX_MULTIPLE)));}public static implicit operator VInt(int i){return new VInt(i);}public static explicit operator float(VInt ob){return (float)ob.i * 1.0f / FIX_MULTIPLE;}public static explicit operator long(VInt ob){return (long)ob.i;}public static VInt operator +(VInt a, VInt b){return new VInt(a.i + b.i);}public static VInt operator -(VInt a, VInt b){return new VInt(a.i - b.i);}public static VInt operator *(VInt a, VInt b){long value = a.i * b.i;if (value >= 0){value /= FIX_MULTIPLE;}else{value = -(-value / FIX_MULTIPLE);}return new VInt(value);}public static VInt operator /(VInt a, VInt b){return new VInt((a.i * FIX_MULTIPLE / b.i));}public static bool operator ==(VInt a, VInt b){return a.i == b.i;}public static VInt operator -(VInt a){return new VInt(-a.i);}public static bool operator !=(VInt a, VInt b){return a.i != b.i;}public static bool operator >(VInt a, VInt b){return a.i > b.i;}public static bool operator <(VInt a, VInt b){return a.i < b.i;}public static bool operator >=(VInt a, VInt b){return a.i >= b.i;}public static bool operator <=(VInt a, VInt b){return a.i <= b.i;}public static VInt operator >>(VInt value, int moveCount){if (value.i >= 0){return new VInt(value.i >> moveCount);}else{return new VInt(-(-value.i >> moveCount));}}public static VInt operator <<(VInt value, int moveCount){return new VInt(value.i << moveCount);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红日安全vulnstack (一)

目录 环境搭建 本机双网卡 Kali IP 靶机IP Web GetShell 前期信息收集 Yxcms后台模板 Getshell PHPMyAdmin日志 Getshell into outfile写入一句话 X phpmyadmin 日志写入一句话 后渗透 MSF 生成木马上线 提取用户hash值 **hash**加密方式 MSF权限Shell至CS CS …

如何使用FastAPI开发Serverless应用?

使用FastAPI开发Serverless应用是一种现代且高效的方法&#xff0c;它结合了FastAPI的高性能和Serverless架构的灵活性、可扩展性以及低成本。下面是一个基本指南&#xff0c;帮助你从零开始创建并部署一个FastAPI应用到Serverless环境。 1. 安装FastAPI和Uvicorn 首首先&…

基于springboot美食推荐商城的设计与实现

基于springboot美食推荐商城的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https:…

CSS进阶-定位(二)

8、定位 定位元素的层级比普通元素高&#xff0c;定位元素之间的层级相等&#xff0c;若发生覆盖&#xff0c;则后写的元素覆盖在先写的元素上面。 属性名描述position:relative;相对定位&#xff08;相对默认位置进行定位&#xff0c;不脱离文档流&#xff0c;仍占据页面位置&…

91. 一段曲线颜色渐变

可以通过几何体顶点颜色.attributes.color数据&#xff0c;实现一段曲线颜色渐变效果。 样条曲线几何体 首先提供一个样条曲线生成的几何体。 const geometry new THREE.BufferGeometry(); //创建一个几何体对象 // 三维样条曲线 const curve new THREE.CatmullRomCurve3(…

【Next.js 项目实战系列】04-修改 Issue

原文链接 CSDN 的排版/样式可能有问题&#xff0c;去我的博客查看原文系列吧&#xff0c;觉得有用的话&#xff0c;给我的库点个star&#xff0c;关注一下吧 上一篇【Next.js 项目实战系列】03-查看 Issue 修改 Issue 添加修改 Button​ 本节代码链接 安装 Radix UI 的 Ra…

YOLO11 目标检测 | 导出ONNX模型 | ONNX模型推理

本文分享YOLO11中&#xff0c;从xxx.pt权重文件转为.onnx文件&#xff0c;然后使用.onnx文件&#xff0c;进行目标检测任务的模型推理。 用ONNX模型推理&#xff0c;便于算法到开发板或芯片的部署。 备注&#xff1a;本文是使用Python&#xff0c;编写ONNX模型推理代码的 目…

【Vercel】Vercel静态部署踩坑

背景 在现代的软件开发中&#xff0c;自动化部署是一个不可或缺的环节。Vercel作为一个流行的前端部署平台&#xff0c;提供了与GitHub的无缝集成&#xff0c;使得开发者能够在每次提交代码后自动触发部署流程。然而&#xff0c;自动化部署过程中可能会遇到一些挑战&#xff0…

全网免费的文献调研方法以及获取外网最新论文、代码和翻译pdf论文的方法(适用于硕士、博士、科研)

1. 文献调研 学术搜索引擎(十分推荐前三个&#xff0c;超有用)&#xff1a;使用 Google Scholar(https://scholar.google.com/)(https://scholar.google.com.tw/)(巨人学术搜索‬‬)、&#xff08;三个都可以&#xff0c;镜像网站&#xff09; arXiv(https://arxiv.org/)、&am…

qt页面设计

1. Designer 设计师&#xff08;掌握&#xff09; Designer是Qt内置的一款界面设计程序&#xff0c;设计的界面文件为.ui格式。 C程序员通常不会单独启动Designer&#xff0c;如果要在项目中使用Designer程序&#xff0c;只需要在新建项目时&#xff0c;勾选“创建界面文件”选…

学习C语言(25)

整理今天的学习内容 预处理详解 1.预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号是在预处理期间处理的 __FILE__&#xff08;进行编译的源文件&#xff09; __LINE__ &#xff08;文件当前的行号&#xff09; __DATE__&#xff08…

Visual Studio 2022安OpenCV可视化工具image watch

1. 打开 VS2022 &#xff0c;扩展 -管理扩展 2. 搜索 Image Watch 关闭VS2022 后 安装 打开视图、调出 Image Watch 窗口 测试代码&#xff1a; #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.…

分布式系统中的Dapper与Twitter Zipkin:链路追踪技术的实现与应用

目录 一、什么是链路追踪&#xff1f; 二、核心思想Dapper &#xff08;一&#xff09;Dapper链路追踪基本概念概要 &#xff08;二&#xff09;Trace、Span、Annotations Trace Span Annotation 案例说明 &#xff08;三&#xff09;带内数据与带外数据 带外数据 带…

Android应用性能优化的方法

Android应用性能优化是一个复杂而关键的过程&#xff0c;涉及多个方面&#xff0c;包括布局优化、网络优化、安装包优化、内存优化、卡顿优化、启动优化等。以下是对这些优化方法的详细解析&#xff1a; 一、布局优化 布局优化是Android性能优化的基础&#xff0c;主要目标是…

【Linux】进程间通信---匿名管道、命名管道(超详解)

目录 匿名管道 管道的创建&#xff1a; 创建子进程&#xff1a; 关闭不需要的fd: 发送消息&#xff1a; 管道的5种特征&#xff1a; 管道的4种情况&#xff1a; 命名管道 创建命名管道&#xff1a; 删除命名管道&#xff1a; 手写命名管道&#xff1a; 完整代码&am…

C语言:函数指针与指针函数的区别*

文章目录 一、函数指针定义语法 二、指针函数定义语法用途 三、函数指针与指针函数的区别本质不同&#xff1a;声明方式&#xff1a; 四、结论 C语言&#xff1a;函数指针与指针函数的区别 在C语言这个充满灵活性和强大表达力的编程世界中&#xff0c;函数指针和指针函数是两个…

小班幼儿攻击性行为的现状研究-以德格县某幼儿园为例(开题报告)

毕业论文(设计)开题报告 题目 题目类别 毕业设计 姓名 专业 班级 学号 一、选题背景及依据(简述国内外研究状况和相关领域中已有的研究成果(文献综述),选题目的、意义,列出主要参考文献) (一)选题背景与依据 1、选题背景 幼儿教育作为个体一生教育的起点,对于儿童…

多线程(七):单例模式指令重排序

目录 1. 单例模式 1.1 饿汉模式 1.2 懒汉模式 2. 懒汉模式下的问题 2.1 线程安全问题 2.2 如何解决 --- 加锁 2.3 加锁引入的新问题 --- 性能问题 2.4 指令重排序问题 2.4.1 指令重排序 2.4.2 指令重排序引发的问题 1. 单例模式 单例模式, 是设计模式中最典型的一种模…

Vision China 2024 | 移远通信以一体化的AI训练及部署能力,引领3C电子制造智能升级

10月14日&#xff0c;由机器视觉产业联盟(CMVU)主办的中国机器视觉展(Vision China)在深圳国际会展中心盛大开幕。作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信应邀参加展会首日举办的“智造引领数质并进”3C电子制造自动化与数字化论坛。 论坛上&#xff0c;移…

PostgreSQL学习笔记:PostgreSQL vs MySQL

PostgreSQL 和 MySQL 都是广泛使用的关系型数据库管理系统&#xff0c;它们有以下一些对比&#xff1a; 一、功能特性 1. 数据类型支持 PostgreSQL&#xff1a;支持丰富的数据类型&#xff0c;包括数组、JSON、JSONB、范围类型、几何类型等。对于复杂数据结构的存储和处理非…