This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
API
Animations-Related Classes
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
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Двойная точность координат

There are cases when you need to calculate very large numbers (e.g. the distances in space), or, conversely, very small numbers (e.g. the distances in microcosm). In this regard, Unigine features a 64-bit double-precision floating-point format (instead of the 32-bit single-precision one) to define coordinates of objects in the virtual scene. Therefore, it is possible to create highly detailed virtually unlimited worlds (the maximum coordinates values are effectively 536,870,912 times larger than for the 32-bit float precision). Бывают случаи, когда нужно рассчитывать очень большие числа (например, расстояния в пространстве) или, наоборот, очень маленькие числа (например, расстояния в микромире). В связи с этим Unigine предлагает 64-битный формат с плавающей запятой двойной точности (вместо 32-битного формата одинарной точности) для определения координат объектов в виртуальной сцене. Следовательно, можно создавать высокодетализированные виртуально неограниченные миры (максимальные значения координат фактически в 536 870 912 раз больше, чем для 32-битной точности с плавающей запятой).

In reality, float precision limitations are noticeable even on scenes larger than 10x10 km due to the accumulation of positioning errors, so double precision should be used for anything larger to maintain accuracy. На самом деле ограничения одинарной точности заметны даже на сценах размером более 10x10 км из-за накопления ошибок позиционирования, поэтому для сохранения точности следует использовать двойную точность для всего, что больше.

Single Precision versus Double Precision
Одинарная точность против двойной точности#

In computing, floating point is a method of representing a real number by means of a mantissa and an exponent: В вычислениях формат с плавающей запятой представляет собой метод представления действительного числа с помощью мантиссы и экспоненты:

mantissa ×  base  ^  exponent , mantissa ×  base  ^  exponent ,

where base is equal to 2. где base равно 2 .

The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard used both for float-precision and double-precision floating point formats. The single-precision floating point format occupies 32 bits (4 bytes), the double-precision floating point format occupies 64 bits (8 bytes). The number formats for both cases can be seen at the picture below: Стандарт IEEE для арифметики с плавающей запятой (IEEE 754) - это технический стандарт, используемый как для форматов с плавающей запятой, так и для форматов с плавающей запятой двойной точности. Формат с плавающей запятой одинарной точности занимает 32 бита (4 байта), формат с плавающей запятой двойной точности занимает 64 бита (8 байтов). Числовые форматы для обоих случаев можно увидеть на картинке ниже:

Where: Где:

  • S - sign (0 - positive; 1 - negative) S - знак ( 0 - положительный; 1 - отрицательный)
  • E - exponent (127 for single, 1023 for double) E - показатель степени ( 127 для одинарного, 1023 для двойного)
  • m - mantissa [1;2] m - мантисса [1;2]

The distribution for the floating point format (both single and double) is subnormal. For instance, we have -1 ≤ E ≤ 2: Распределение для формата с плавающей запятой (как одинарного, так и двойного) субнормальное. Например, у нас есть -1 ≤ E ≤ 2:

The possible values range for single and double precision, as well as the minimal possible gradations are shown at the picture below. Возможный диапазон значений для одинарной и двойной точности, а также минимально возможные градации показаны на рисунке ниже.

Примечание
Values that are set in UnigineEditor have the following limitations:
  • Values range: [-10^9;+10^9]. The lower and higher values will be displayed as inf.Values range: [-10^9;+10^9]. The lower and higher values will be displayed as inf.
  • The maximum quantity of the numbers in the fractional part cannot be more than 3.The maximum quantity of the numbers in the fractional part cannot be more than 3.

Values set by means of UnigineScript functions have only format's limitations.Values set by means of UnigineScript functions have only format's limitations.

Values range: [-10^9;+10^9]. The lower and higher values will be displayed as inf.The maximum quantity of the numbers in the fractional part cannot be more than 3.Values set by means of UnigineScript functions have only format's limitations.
Значения, устанавливаемые в UnigineEditor, имеют следующие ограничения:
  • Values range: [-10^9;+10^9]. The lower and higher values will be displayed as inf. Диапазон значений: [-10^9;+10^9]. Меньшие и большие значения будут отображаться как inf (бесконечность).
  • The maximum quantity of the numbers in the fractional part cannot be more than 3. Максимальное количество чисел в дробной части не может быть больше 3.

Values set by means of UnigineScript functions have only format's limitations. Значения, устанавливаемые с помощью функций API, имеют только ограничения формата.

Errors
Ошибки#

Usage of a single precision floating format leads to inaccurancies in calculations shown below. Использование формата с плавающей запятой одинарной точности приводит к ошибкам в расчетах, показанных ниже.

Positioning Error
Ошибка позиционирования#

The large distance between possible graduations in the single-precision floating point leads to the positioning errors. The picture below schematically demonstrates the positioning while using single and double precision: Большое расстояние между возможными градуировками в числах с плавающей запятой одинарной точности приводит к ошибкам позиционирования . На рисунке ниже схематично показано позиционирование с использованием одинарной и двойной точности:

In the virtual scene, object transformations (including locating, rotating and scaling), animation and physics implementation lead to a positioning error, which, in turn, cause objects jittering. To avoid this problem and to provide far more precise positioning, use the double-precision floating point coordinates. Besides, positioning errors may lead to a vertex collapse that can be schematically seen at the picture below. В виртуальной сцене преобразования объектов (включая перемещение, вращение и масштабирование), анимация и реализация физики приводят к ошибке позиционирования, которая, в свою очередь, вызывает дрожание объектов. Чтобы избежать этой проблемы и обеспечить более точное позиционирование, используйте координаты с плавающей запятой двойной точности. Кроме того, ошибки позиционирования могут привести к коллапсу вершин, что схематично видно на рисунке ниже.

Error Accumulation
Накопление ошибок#

As the numbers of the IEEE 754 format present a finite set, onto which the infinite set of real numbers is transmitted, the output value may consist a representation precision error, which in further calculations cause the error accumulation. The function of the error is shown below: Поскольку числа в формате IEEE 754 представляют собой конечный набор, в который передается бесконечный набор действительных чисел, выходное значение может содержать ошибку точности представления, которая в дальнейших вычислениях вызывает накопление ошибок . Функция ошибки показана ниже:

The maximum absolute error for a number is equal to the half of the possible gradation. As the possible gradation is doubled when the exponent is incremented, the error is increased too. Максимальная абсолютная ошибка числа равна половине возможной градации. Поскольку возможная градация удваивается при увеличении экспоненты, увеличивается и ошибка.

The gradation of the numbers equals to 2 ^ (E-150) for single-precision numbers, and 2 ^ (E-1075) for double-precision numbers. Градация чисел равна 2 ^ (E-150) для чисел с одинарной точностью и 2 ^ (E-1075) для чисел с двойной точностью.

Lets compare the 1 value for both single-precision and double-precision numbers. Давайте сравним значение 1 для чисел с одинарной и двойной точностью.

Одинарная Двойная
Число, дес. 1.0 1.0 1.0 1.0
IEEE754, шестн. 3F800000 3F800000 3FF00000 00000000 3FF00000 00000000
Абсолютная погрешность, дес. 2 -23 ≈ 1.192*10 -7 2 -23 ≈ 1,192 * 10 -7 2 -52 ≈ 2.220446*10 -16 2 -52 ≈ 2.220446 * 10 -16
Относительная погрешность, % 11.9209*10 -6 11.9209 * 10 -6 2.220446*10 -14 2.220446 * 10 -14

According to the distribution, the gradation values are increasing, which leads to the error increase. But in comparison, the double-precision numbers error is many times less than the single-precision numbers errors. По распределению значения градаций увеличиваются, что приводит к увеличению погрешности. Но для сравнения, ошибка чисел двойной точности во много раз меньше ошибок чисел одинарной точности.

Последнее обновление: 16.08.2024
Build: ()