Двойная точность координат
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 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. По распределению значения градаций увеличиваются, что приводит к увеличению погрешности. Но для сравнения, ошибка чисел двойной точности во много раз меньше ошибок чисел одинарной точности.