bsfdword?
Ещё раз убеждаюсь, как страшно Фри Паскаль страдает от нехватки чего-то хотя бы на уровне
http://php.net/Сколько замечательных фич разработчиками - и никто не пользуется, потому что никто не знает (поиск по исходникам RTL дал
ноль использований этой функции). Очень обидно.
имхо fixed-point таки надёжнее, ибо soft-float это тот же геморрой.
Мммм... Наверно, так и сделаю. Действительно геморрой.
Во первых, 32 бита - это таки дохрена много. Если правильно разместить точку - это таки 65535 километров с разрешением 15 мм. Этого *уже* хватило бы, т.к. я планирую *хитрую* систему представления медленных движений снижением частоты просчётов физики для объекта. Например, вектор скорости - это три 16-битных целых плюс экспонента, общая на всех. Весь вектор - 64 бита.
Потом, можно объявить один и тот же фиксированный тип несколько раз для разных диапазонов, состыковав их через операторы присваивания младшего старшему, включающие умножение на константу (< 1.0), а присваивание старшего младшему - недопустимая операция.
Заодно дисциплинирует при написании ИИ, оперирующего этими понятиями.
Хммм... Тогда, 1.0 будет
ближняя детализованная зона: один метр. Предел - 32 километра, погрешность 0.01 мм.
планета: один километр. Предел 32767 километров, погрешность 15мм.
система: одна А.Е. Предел и погрешность - настраиваемые в рантайме, в зависимости от масштаба мира.
Изначально планирую полу-игрушечную вселенную, где радиус Земли - 60 км. Тогда одна А.Е. будет 1.5 млн.км., погрешность 22км. Сравнимо с радиусом планеты
Так. Стоп. Не катит. На кой мне межзвёздные расстояния? Жёстко ограничить размер системы 32.768 А.Е, воткнуть один-два Юпитера на 5..6 А.Е., до которых лететь месяц реального времени - и на этом всё, никакого пояса Койпера. Это скучно и для геймплея нафиг не нужно. Тогда 1.0 - это 0.001 А.Е, погрешность 22 метра. Катит. А если корабли сойдутся в космосе - выделять им локальные системы координат масштабов планета и локальная. Пусть относительно неё крутятся.
увгнор [сгоняет голубя с клавиатуры] В принципе, дальше можно не идти, т.к. межзвёздные перелёты не планируются, их роль исполнят порталы в параллельные миры (как вариант - гиперджамп, жёско привязанный к звёздам), и звёзды - не более, чем серебряные гвозди на чёрном скайбоксе.
Для полного использования диапазона нужно везде, где используется возведение в квадрат (типа расчёта расстояния), разработать функции с внутреней точность 64 бита, чтобы без переполнения высирали обратно 32-битное фиксированное, приведённое обратно к диапазону.
Опять же, пичалька: где взять
fast inverse square root для фиксированных чисел? Я слишком валенок в математике чтобы портировать этот метод самому.