Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

LuaScript - для RS

Другие вопросы и проблемы разработки дополнений

Re: LuaScript - для RS

Сообщение maestro » 28.10.2019, 23:09

Одним из решений проблемы больших чисел может являться уменьшение этих чисел (как бы странно это ни звучало) либо разделение их на части. Зависит от того, что в этих числах содержится и для чего это нужно.
Мне один раз нужно было решить задачу ( A - B ) / C, где A, B и C - 64-битные целые числа (в виде структур). Из возможностей платформы были доступны максимум 32-битное целое и 64-битное с плавающей точкой. В процессе решения выяснилось, что более 10 разрядов на деле оказались не нужны, и после определённого шаманства с битами уже хватало типа Double.
maestro
 
Сообщения: 246
Зарегистрирован: 18.03.2011, 15:13
Благодарил (а): 0 раз.
Поблагодарили: 142 раз.
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Виталий

Re: LuaScript - для RS

Сообщение Света » 28.10.2019, 23:54

К сожалению, я не могу ничего такого сделать (уменьшение этих чисел либо разделение). Любое действие с числом дает неверный (в моем понимании) результат.
Например, как в описанном мной ранее случае: "если сделать простое арифметическое действие (4294967295 - 3534543), мы в симуляторе получим 4291432704, тогда как правильный ответ - 4291432752". Разница - 48, это даже не кратно двоичному представлению.
Проблема у меня с битовыми операциями - я не могу получить правильное десятичное число на выходе. Если я конвертирую 32-разрядное двоичное число математическим путем (суммируя произведение бита на двойку в степени разряда), я получаю ошибку суммирования, например, 0b11111111111111111111111111110111 в результате равно 4294967296 (что соответсвует максимальному значению - 0b11111111111111111111111111111111). Можно предположить, что сбоит моя функция. Но если использовать базовую функцию tonumber() - результат тот же.
Код: Выделить всё
print (tonumber ("11111111111111111111111111110111", 2)) -->> 4294967296

Перевожу двухбитное число в шестнадцатиричное, чтобы потом его преобразовать в десятичное - результат тот же:
Код: Выделить всё
print (tonumber ("FFFFFFF7", 16)) -->> 4294967296

То есть, по неизвестным мне причинам симулятор во всех этих случаях вернул максимальное 32-битное число - 4294967296. Тогда как верное - 4294967287.
То, что возвращаемые числа во всех случаях конвертирования одинаковые, показывает, что это правильный, с точки зрения симулятора, результат. Но я не понимаю его логику, в моем мире работают другие правила арифметики )))). А самое главное - в других программах тоже. Даже в lua 5.3 эти же функции дают нормальный результат.
Поэтому я не могу как-то уменьшить разрядность этих чисел - так или иначе, но в итоге мне придется их восстанавливать, а это невозможно без арифметических действий, будь то суммирование или побитная сборка.
Поэтому сейчас я вижу 2 пути: или подключать внешнюю библиотеку, которая будет работать по правилам "привычной" арифметики и возвращать уже готовое число, или же писать вообще весь lua-код на битах, фактически - на ассемблере.
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 679
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 399 раз.
Поблагодарили: 745 раз.
Блог: Просмотр блога (15)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Re: LuaScript - для RS

Сообщение BooYa » 29.10.2019, 08:03

В данном случае единственный знакомый человек, что могёт в С - это Виталий. Поэтому и попросили помощи с компилированием библиотеки.
Аватара пользователя
BooYa
 
Сообщения: 2920
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 914 раз.
Поблагодарили: 2137 раз.
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Romazan67 » 29.10.2019, 09:07

Света, а у Вас Скайп есть или через личку? Я спросил у знакомых, переслал им Ваш текст и они запросили доп информацию о следующем: а кусок скрипта можно вместе с функцией конвертации ?
Но крашу, крашу я заборы вагоны, чтоб тунеядцем не прослыть...
Как снимать на текстуры https://yadi.sk/i/d1_dhD8dKXpMHw (обновленная версия).
Romazan67
 
Сообщения: 280
Зарегистрирован: 09.01.2013, 10:53
Благодарил (а): 186 раз.
Поблагодарили: 190 раз.
Блог: Просмотр блога (3)
Играю в: Train Simulator 2018
Имя: Роман

Re: LuaScript - для RS

Сообщение Света » 29.10.2019, 11:24

Romazan67, есть скайп (divovigna), можно через личку - как удобнее...
Да, можно кусок скрипта, и функцию. Вот страничка с описанием работы этой библиотеки и её подключения, На этой же страничке ссылка на архив с исходниками, там как исходные файлы на С (или С++, я не различаю), так и фрагменты кода на lua, с тестовыми примерами.
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 679
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 399 раз.
Поблагодарили: 745 раз.
Блог: Просмотр блога (15)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Пред.

Вернуться в [RW] Другие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1