This page has been translated automatically.
视频教程
界面
要领
高级
实用建议
专业(SIM)
UnigineEditor
界面概述
资源工作流程
设置和首选项
项目开发
调整节点参数
Setting Up Materials
设置属性
照明
Sandworm
使用编辑器工具执行特定任务
如何擴展編輯器功能
嵌入式节点类型
Nodes
Objects
Effects
Decals
光源
Geodetics
World Nodes
Sound Objects
Pathfinding Objects
Players
编程
基本原理
搭建开发环境
使用范例
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Plugins
File Formats
Materials and Shaders
Rebuilding the Engine Tools
GUI
双精度坐标
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
创建内容
内容优化
Materials
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
注意! 这个版本的文档是过时的,因为它描述了一个较老的SDK版本!请切换到最新SDK版本的文档。
注意! 这个版本的文档描述了一个不再受支持的旧SDK版本!请升级到最新的SDK版本。

双精度坐标

在某些情况下,您需要计算非常大的数字(例如,空间中的距离),或者相反,需要计算非常小的数字(例如,微观中的距离)。在这方面,Unigine具有64位双精度浮点格式(而不是32位单精度浮点格式)来定义虚拟场景中对象的坐标。因此,可以创建几乎没有限制的高度详细的世界(最大坐标值实际上是32位浮点精度的536,870,912倍)。

实际上,由于定位误差的累积,即使在大于10x10 km的场景上,浮动精度限制也很明显,因此对于较大的任何物体都应使用双精度,以保持精度。

单精度与双精度#

在计算中,浮点是一种通过尾数和指数表示实数的方法:

mantissa ×  base  ^  exponent ,

其中等于 2

IEEE浮点算术标准(IEEE 754)是用于浮点精度和双精度浮点格式的技术标准。单精度浮点格式占用32位(4字节),双精度浮点格式占用64位(8字节)。两种情况的数字格式如下图所示:

其中:

  • S-符号( 0 -正; 1 -负)
  • E-指数(单精度为 127 ,双精度为 1023
  • m - 尾数 [1;2]

浮点格式(单点和双点)的分布是次正态的。例如,我们有-1 ≤ E ≤ 2

单精度和双精度的可能值范围以及最小可能的灰度如下图所示。

注意
在UnigineEditor中设置的值具有以下限制:
  • 值范围:[-10^9;+10^9]。较低和较高的值将显示为 inf
  • 小数部分中数字的最大数量不能超过3。

通过UnigineScript函数设置的值仅具有格式限制。

失误#

使用单精度浮点格式会导致如下所示的计算错误。

定位误差#

单精度浮点中可能的刻度之间的较大距离会导致定位错误。下图以示意图形式演示了使用单精度和双精度时的定位:

在虚拟场景中,对象转换(包括定位,旋转和缩放),动画和物理实现会导致定位错误,进而导致对象抖动。为避免此问题并提供更精确的定位,请使用双精度浮点坐标。此外,定位错误可能导致顶点塌陷,如下图所示。

错误累积#

由于IEEE 754格式的数字表示一个有限的集合,在该集合上传输了无限的实数集合,因此输出值可能包含表示精度误差,这在进一步的计算中会导致误差累积。错误的功能如下所示:

一个数字的最大绝对误差等于可能的灰度的一半。当指数增加时,可能的灰度会加倍,因此误差也会增加。

对于单精度数字,数字的等级等于2 ^ (E-150),对于双精度数字,数字的等级等于2 ^ (E-1075)

让我们比较单精度数字和双精度数字的 1 值。

单精度 双精度
数字(十进制) 1.0 1.0
IEEE754(十六进制) 3F800000 3FF00000 00000000
绝对误差(十进制) 2 -23 ≈1.192 * 10 -7 2 -52 ≈2.220446 * 10 -16
相对误差, % 11.9209 * 10 -6 2.220446 * 10 -14

根据分布,灰度值增加,导致误差增加。但是相比之下,双精度数字错误要比单精度数字错误小很多倍。

最新更新: 2022-10-10
Build: ()