反向Z(Reversed-Z)的深度缓冲原理

参考文章:https://zhuanlan.zhihu.com/p/75517534

https://zjinc36.github.io/2020/03/10/2020-20200309-%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%AE%E7%82%B9%E6%95%B0%E4%B8%8E%E6%B5%AE%E7%82%B9%E6%95%B0%E7%9A%84%E7%B2%BE%E5%BA%A6%E9%97%AE%E9%A2%98/

一 反向Z(Reversed-Z)的深度缓冲

https://zhuanlan.zhihu.com/p/75517534

二 浮点数精度问题

为什么会有精度问题

  1. 在数学中,与浮点数对应的是小数
  2. 数学上区间[0,1]之间的小数有无穷多个
  3. 计算机中,32位浮点数最多可以表示2^32个数

所以,计算机是不可能描述得尽的,必然会有一些近似,一些精度所示

计算机中如何表示浮点数

浮点数的格式

当前,计算机中浮点数采用的是IEEE 754标准。浮点数分为单精度浮点数(32位)和双精度浮点数(64位)。浮点数的基本格式如下:

各部分含义如下:

  • sign:符号位,0表示正,1表示负
  • exponent:阶码,浮点数的幂次。一般采用移码表示。
  • fraction:浮点数的小数部分

二进制的浮点数转十进制

上述格式描述的浮点数的十进制值为value = (-1)^S * (1.fraction) * 2^(exponent - 偏差)

  • (-1)^S表示符号
  • 1.fraction是二进制的小数
    • 由于除0外的所有小数都可以写成1.fractionX2^E的形式,因而,在表示浮点数时,省略掉了前面的整数部分1
  • 2^(exponent - 偏差)表示幂次,类似于二进制的科学计数法
    • 单精度情况下2^(exponent - 127)
    • 双精度情况下2^(exponent - 1023)
    • exponent - 127或者exponent - 1023是因为指数有正有负,单精度情况下,阶码有8位,即表示(2^8 - 1)个数,正数负数对半分,就是减去127(双精度同理)

非规范化小数

上面描述的是规格化的浮点数,如果浮点数的阶码部分全0或者全1,则表示非规格化的浮点数

  • 阶码不是全0或全1,规格化浮点数。
  • 阶码全0:表示0.fraction * 2^ (1-127)次。注意,此时指数部分是1-127.这一类表示了接近0的小数部分。
  • 阶码全1:如果小数部分全0,表示正负无穷大。如果出现1,表示不是一个数NaN

举例说明

 

浮点数的精度

通过上面的介绍可以发现,浮点数的精度取决于二进制小数部分的精度。对于单精度浮点数,小数部分有23位,对应十进制小数见下表

二进制小数十进制小数
2^-230.00000011920928955078125
2^-220.0000002384185791015625
2^-210.000000476837158203125
2^-200.00000095367431640625
2^-190.0000019073486328125
2^-180.000003814697265625
  • 由于是规格化的浮点数,所以小数部分都要加上1,可以知道,单精度浮点数的小数部分最小是1.00000011920928955078125,其次是1.0000002384185791015625,注意到这两个小数之间的间隔
  • 那么,要表示1.0000001和1.0000002之间的小数,则单精度浮点数无能为力,1.0000001已经是23位小数部分描述的最小值了
  • 通过这样的分析可以发现,23位只能描述到小数点后第7位,即1.0000001,1.0000002,1.0000004,1.0000009对应了二进制的小数值,其他要通过上面几个的组合来表示
  • 事实上,如果考虑保留前7位,而第8位的四舍五入,1.0000004,1.0000009本身的表示也是不准确的。
  • 类似的分析,双精度浮点数能准确表示到小数点后第15位,第16位部分准确

一个整数用float来存储时保存的精度有多少

思路:

  • 将整数转化为二进制科学计数法形式,然后再对应到规格化浮点数中
  • 在处理小数部分时,多余的数位即为损失的精度

结论

  • 一般来说,无论是整数或者小数,用float表示时,从左边第一个非0的数字算起,从高到低的7位是准确的。此后的数位是不能保证精确的。
  • 相应的,从1到0x1FFFFFFFFFFFFF(53位全1,18014398509481983)均可以准确用double来表示。其他整数,只有在转化为double时小数部分不超过52位才可以精确表示。否则,会有一定的精度损失。无论整数或者小数,用double表示时,从左边第一个非0的数字起,从高到低的16位是准确的,此后的数位不一定精确。

浮点数分布

通过上面的分析可以发现,尽管浮点数表示的范围很广,但由于精度损失的存在,加上幂次的放大作用,一个浮点数实际上是表示了周围的一个有理数区间。如果将浮点数绘制到一个数轴上,直观上看,靠近0的部分,浮点数出现较密集。越靠近无穷大,浮点数分布越稀疏,一个浮点值代表了周围一片数据。如下图所示。从这个意义上来说,浮点数不宜直接比较相等,它们是代表了一个数据范围。实际应用中,如果要使用浮点数计算,一定要考虑精度问题。在满足精度要求的前提下,计算结果才是有效的。


20200309021.png

在计算精度要求情形下,例如商业计算等,应该避免使用浮点数,严格采取高精度计算。

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

output怎么用_性能领先,即训即用,快速部署,飞桨首次揭秘服务器端推理库

允中 发自 凹非寺量子位 编辑 | 公众号 QbitAI假如问在深度学习实践中,最难的部分是什么?猜测80%的开发者都会说:“当然是调参啊。”为什么难呢?因为调参就像厨师根据食材找到了料理配方,药剂师根据药材找到了药方&…

GPU架构杂乱备忘——IMR、TBR、TBDR

原文:https://juejin.cn/post/6844904132864655367 GPU架构杂乱备忘——IMR、TBR、TBDR 之前觉得涉及到gpu架构相关的问题只需要知道个大概就好,毕竟在图形api的层面上应该把硬件的细节给隐蔽掉,gpu的架构千千万万,每家厂商每个…

requests下载大文件_11种方法教你用Python高效下载资源!

在本教程中,你将学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、Amazon S3和其他资源。最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件、下载大型文件、完成一个多线程下载以及其他…

android自定义push通知_20个海外Web和App推送通知服务工具

在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处。推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站。它们可以帮助你以指数方式增加流量和参与率。因此,营销人员,广告商&#xff…

linux 删除文件_Linux删除文件夹命令有哪些

今天要和大家分享的Linux常用命令是Linux删除文件夹命令,Linux删除文件夹很简单,常用的命令有rmdir和rm,以下分别介绍一下,大家根据情况选择使用即可。 Linux删除文件夹命令有哪些 ①Linux删除文件夹命令:rmdir rmdir命令使用场景: 当有空目录要删除时,可使用rmdir指令。…

url上接收到 el表达式 不渲染_一文摸透从输入URL到页面渲染的过程

一文摸透从输入URL到页面渲染的过程从输入URL到页面渲染需要Chrome浏览器的多个进程配合,所以我们先来谈谈现阶段Chrome浏览器的多进程架构。一、Chrome架构目前Chrome采用的是多进程的架构模式,可分为主要的五类进程,分别是:浏览…

模拟弱网工具的使用

https://zhuanlan.zhihu.com/p/98185153 https://www.jianshu.com/p/5e35a3585df5 今年5G技术开始铺开并进入商用。随着5G的到来,不知道大家有没有和我一样的感受,希望是我心理作用吧,我发现作为一个4G用户,最近我的手机网速是不…

c语言计算a+aa+aaa_物业服务企业信用等级公布,42家获AAA级!你家小区物业怎么样?...

杭州住保房管 根据《浙江省物业服务企业信用信息管理办法》和《浙江省行业信用监管责任体系构建工作方案》,日前,省建设厅公布了 2020年度浙江省物业服务企业信用等级结果名单,杭州165家物业服务企业上榜,绿城物业服务集团有限公司…

python 可视化_python可视化基础

常用的python可视化工具包是matplotlib,seaborn是在matplotlib基础上做的进一步封装。入坑python可视化,对有些人来说如同望山跑死马,心气上早输了一节。其实学习一门新知识,首先要掌握的是这门知识的最少最核心知识,剩…

使用post访问不到接口_Postman工具使用说明

一、工具说明接口测试工具,支持post,get,请求的接口测试;支持参数中带token,带cookie等接口测试。印度阿三开发的产品,稳定性较好,强烈推荐,屡试很爽。适用:前后端分离的…

java正则表达式判断手机号_正则表达式学习之简单手机号和邮箱练习

正则表达式的组成规则在java中,正则表达式的编译是类java.util.regex.Pattern正则表达式的构造摘要1.字符x包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号的普通字符。比如之前的例子可以将[1-9][0-9]{4,12}改成1[0-9]{4,12}或者a[0-9]{4,12}此时就…

unity 解决引入dlopen api的问题

打包出来的ipa在腾讯的wetest的ios预审中报以下错误。 对于dlopen api, 是苹果禁用的,对Unity项目痛苦的挨个二分排查后,发现很多都有可能引入。 1.和XML或Excel相关的C# API极有可能引入。https://blog.csdn.net/qq_36622009/article/details/10388285…

运营体系_用户运营系统论:解构复杂产品的大规模用户运营体系

本文介绍了大规模用户运营体系中的三大原则——数据驱动、精细化运营、自动化(或叫产品化),以及用户运营体系中的三个子系统——用户生命周期管理系统、用户分层运营系统、用户行为激励系统。我们在实际的产品工作中,经常会用到各种各样的运营体系&#…

ShaderToy效果学习(转成Unity URP) - MathEye

来自IQ大神的小教程,效果图: shaderToy源码:https://www.shadertoy.com/view/lsfGRr 教程视频:https://www.bilibili.com/video/BV1KK4y1K7wM/ Unity项目代码Git地址:https://github.com/Dejavu0709/Graphics.git Sh…

asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...

一:SSO体系结构SSOSSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务…

是可改写的随机存储器_关于存储器的一些基础知识整理

RAMRandom-Access-Memory,随机存储存储器,可读可写,分为SRAM和DRAM,即静态随机存储器和动态随机存储器,理解上静动态主要体现是否需要刷新,通常DRAM需要刷新,否则数据将丢失;SRAM的效率较好,而成…

fpga供电电压偏低会怎样_[走近FPGA]之开发板介绍篇

开发板概述在走近FPGA预告篇中,我们已经提到了系列文章使用的开发平台,硬木课堂Xilinx Artix 7 FPGA板,如下图所示。它使用的FPGA芯片型号为Xilinx Artix-7 XC7A75T,具有电平开关、LED、矩阵键盘、数码管等基本外设,同…

使用arm-linux-androideabi-addr2line 定位Unity Android 段错误

arm-linux-androideabi-addr2line是NDK中提供的将内存地址转换成行号的一个工具,通俗具体点就是根据各种日志,譬如trace日志和tomestone日志中包含的so库日志的中偏移内存地址,定位到具体是在那个文件的那一行。Unity的安装目录中&#xff0c…

springboot几种注入_Spring Boot中使用JdbcTemplate访问数据库

本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例。数据源配置在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。首先,为了连接数据库需要引入jdbc支持,在pom…

搜索重复代码_LeetCode专题——详解搜索算法中的搜索策略和剪枝

今天是LeetCode专题第20篇文章,今天讨论的是数字组合问题。描述给定一个int类型的候选集,和一个int类型的target,要求返回所有的数字组合,使得组合内所有数字的和刚好等于target。注意:所有的元素都是正数所有元素没有…