Я спрашивал себя, в чем разница между целочисленными и плавающими прошивками и как с ними бороться. Все, что я смог найти до сих пор, это:
целочисленная версия, которая поддерживает только целочисленные операции, и версия с плавающей запятой, которая содержит поддержку вычислений с плавающей запятой.
Хорошо, пока все хорошо, но что это значит в реальной жизни?
Что происходит, когда я вычисляю
a = 3/2
Для версии с плавающей запятой я ожидаю a = 1.5 Для целочисленной версии я ожидаю a = 1. Или будет равно 2 или выдает ошибку, сбой или что-то еще? Я знаю, я мог бы просто запустить целочисленную версию и попробовать, но я также хотел бы обсудить это, чтобы получить ответ здесь. :)
Какие еще существуют ограничения/различия? Основная причина, по которой я спрашиваю: я пытался запустить некоторые скрипты в целочисленной версии без каких-либо операций с плавающей запятой, о которых я знаю, и некоторых функций просто нет. С версией с плавающей запятой все работает как положено.
Обновлять:
Вот фрагмент, который дает неожиданный результат:
local duration = (now - eventStart)
продолжительность равна 0 с целочисленной прошивкой. Я предполагаю, что это потому, что теперь eventStart слишком велик для целого числа:
now: 1477651622514913
eventStart: 1477651619238587
Поэтому я бы сказал, что другие ограничения заключаются в том, что целочисленная версия поддерживает только целочисленные операции с 31-битными значениями, потому что когда я конвертирую
now = tonumber(now)
теперь = 2147483647, что равно 2^31 - 1
так в целой прошивке
1477651622514913 - 1477651619238587 = 0
такой же как
2147483647 - 2147483647
что очевидно 0