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
Учебные материалы

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

Бывают случаи, когда нужно рассчитывать очень большие числа (например, расстояния в пространстве) или, наоборот, очень маленькие числа (например, расстояния в микромире). В связи с этим Unigine предлагает 64-битный формат с плавающей запятой двойной точности (вместо 32-битного формата одинарной точности) для определения координат объектов в виртуальной сцене. Следовательно, можно создавать высокодетализированные виртуально неограниченные миры (максимальные значения координат фактически в 536 870 912 раз больше, чем для 32-битной точности с плавающей запятой).

На самом деле ограничения одинарной точности заметны даже на сценах размером более 10x10 км из-за накопления ошибок позиционирования, поэтому для сохранения точности следует использовать двойную точность для всего, что больше.

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

В вычислениях формат с плавающей запятой представляет собой метод представления действительного числа с помощью мантиссы и экспоненты:

mantissa ×  base  ^  exponent ,

где base равно 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.

Значения, устанавливаемые с помощью функций API, имеют только ограничения формата.

Ошибки#

Использование формата с плавающей запятой одинарной точности приводит к ошибкам в расчетах, показанных ниже.

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

Большое расстояние между возможными градуировками в числах с плавающей запятой одинарной точности приводит к ошибкам позиционирования . На рисунке ниже схематично показано позиционирование с использованием одинарной и двойной точности:

В виртуальной сцене преобразования объектов (включая перемещение, вращение и масштабирование), анимация и реализация физики приводят к ошибке позиционирования, которая, в свою очередь, вызывает дрожание объектов. Чтобы избежать этой проблемы и обеспечить более точное позиционирование, используйте координаты с плавающей запятой двойной точности. Кроме того, ошибки позиционирования могут привести к коллапсу вершин, что схематично видно на рисунке ниже.

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

Поскольку числа в формате 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

По распределению значения градаций увеличиваются, что приводит к увеличению погрешности. Но для сравнения, ошибка чисел двойной точности во много раз меньше ошибок чисел одинарной точности.

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