Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OSFM v1.2.0.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.49 Mб
Скачать

4.4.5 Типы переменных

Существует несколько типов переменных. Хотя вы можете объявить переменную, как short или long, результат будет одинаковым, если вы не выходите из диапазона.

  • short  - Короткая целочисленная Диапазон: от -32768 до 32767 Пример: short varNameShort

  • long - Длинная целочисленная Диапазон: от -2 147 483 648 до 2 147 483 647   Пример:  long varNameLong 

  • float - Вещественная переменная Диапазон:  от -3.402823×1038  до  -1.175494×10−38

0 и от 1.175494×10−38  до 3.402823×1038 

(точность до 7 знаков)   Пример:   float varNameFloat 

  • ref - Указатель на копию объекта Диапазон: 32-битный код  FormID    Пример: ref varNameRef  

4.4.6 Целочисленные короткие переменные (Variable types: shortint)

Короткие целочисленные переменные (short) – это целочисленный формат переменных, использующий 16 бит. Самый старший бит – это знак, поэтому диапазон значений переменной от -215 (-32768) до (215)-1 (32767).

4.4.7 Целочисленные длинные переменные (Variable types: longint)

Длинные целочисленные переменные (long) – это целочисленный формат переменных, использующий 32 бита. Самый старший бит – это знак, поэтому диапазон значений переменной от -231 (-2147483648) до (231-1) (2147483647). Когда вы используете long-переменную в скрипте, нет никаких ограничений, но если это глобальная переменная, она хранится как float и могут возникнуть проблемы с точностью при крайних значениях.

4.4.8 Вещественные переменные (Variable types: floating point)

Информация из WIKI: Вещественные переменные (float) - это формат чисел, в котором можно хранить и очень большие, и очень малые значения. Диапазон составляет от 1.18E-38 до 3.40E38. Однако этот формат не всегда является лучшим выбором, потому что техническая реализация этого формата приводит к некоторым неточностям (например, все числа от 2 000 000 000 до 2 000 000 064 хранятся как 2 000 000 000). Почему это происходит? В реальной жизни вещественные числа имеют основание 10. Компьютер использует основание 2, что делает все несколько сложнее, но, по сути, остается прежним, поэтому для объяснений мы будем использовать основание 10. В школе нас учили как записывать большие числа, используя экспоненту, чтобы экономить место и улучшить читаемость: "1 000 000 000" - то же самое, что и " 109 ", а "1 234 000 000" – это " 1,234 * 109 " или " 1,234E9 ". Также и с малыми числами: " 0,000001234 " - это "1,234E-6" Когда длина первого числа (мантиссы) ограничена, очень большие и очень малые числа обрезаются. Обливион использует около 7 знаков для мантиссы: 1.0000000E9 = 1 000 000 000 1.0000001E9 = 1 000 000 100 Таким образом, нельзя отображать числа между 1 000 000 000 и 1 000 000 100 потому, что они требуют 9 знаков, а сохраняется только первые семь. Прим. Garin:

На самом деле приведенные примеры не совсем точны. Смотреть надо двоичный код в районе 7-ми десятичных разрядов - это число должно быть кратно двоичному коду. Нужно дополнительно поэкспериментировать, чтобы определить точно это число. Ориентировочно это 24 двоичных разряда. Например, числу 10 000 000 соответствует двоичный 24-хразрядный код 1001 1000 1000 1011 0100 0000. Двоичный 24-хразрядный код 1000 0000 0000 0000 0000 0000 соответствует десятичному 8388608 или 8.388608Е6. Максимальное число для 24 разрядов – это 16 777 215. Вот тут и надо ловить. Все, что больше, в младших разрядах мантиссы обрезается. То же самое было в TES3. Там длинные 32-разрядные двоичные числа в глобальных переменных "обрезались" до 24-х разрядов, а вот в локальных почему-то работали. Вещественное число занимает 4 байта или 32 двоичных разряда. Из них 3 байта отведены на мантиссу, а 1 байт - на степень. 3 байта мантиссы - это 24 двоичных разряда. 1 байт на степень - это 255, но в игре - только (- 38...+38). Не стоит забывать также, что старший разряд отдан для знака.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]