Подтвердить что ты не робот

Каково максимальное значение числа в Lua?

В документации нет четкого ответа на этот вопрос.

Я заинтересован в увеличении переменной time, которая подсчитывает секунды с момента запуска программы. Если максимальное значение может рассчитывать далеко в будущее, например, 100 лет, тогда мне не нужно позволять переменному приращение навсегда. В противном случае мне придется подумать о хорошей точке reset time назад к 0.

4b9b3361

Ответ 1

как компилируется по умолчанию, число является double, а большинство компиляторов - 64-разрядной плавающей точкой IEEE. это означает 10-битный показатель, поэтому максимальное число составляет примерно 2 ^ 1024 или 5.6e300 лет. что долгое время.

теперь, если вы увеличиваете его, вас может заинтересовать целочисленный диапазон. 52-битная мантисса означает, что наибольшее число, которое может использоваться с целочисленной точностью, составляет 2 ^ 52, около 4.5e15. На 31'557,600 секунд/год это 1.427e8, почти 150 миллионов лет. еще очень долгое время для любого процесса

update 2014-12-30: Lua 5.3 (будет выпущен в любой момент) добавляет поддержку целых значений, либо 32, либо 64 бит, выбранных с помощью флагов компиляции.

Ответ 2

Хотя ссылка tydok на PiL 2.3 является как правильной, так и apropos, и Ответ Хавьера на практике правильно, я думал, что обсуждение чисел в Lua должно быть округлено с помощью нескольких других деталей.

Интерпретатор Lua предназначен для встраивания в приложение, как правило, в качестве языка конфигурации и/или сценариев. При построении для приложения обычно настраиваются некоторые из его функций.

Точный численный тип для использования для чисел доступен для конфигурации. При компиляции для платформы без аппаратной плавающей запятой, где загрузка сторонних модулей не важна (особенно во встроенной системе или приставке игровой приставки), разумно выбрать интегральный тип вместо стандартного double. Иногда также целесообразно переключиться на float.

Однако существуют приложения, где нужны 64-битные целые числа, или большинство чисел могут быть целыми числами, но требуется арифметика с плавающей запятой. Для этих случаев в ядре Lua есть патч LNUM.

LNUM изменяет ядро ​​так, что числа хранятся как целые числа или с плавающей запятой, так и позволяет несколько настраиваемых выборок для точности каждого из них.

Итак, нижняя строка ответит на вопрос о максимальном значении номера Lua в том, что он зависит от конфигурации интерпретатора, выбранного во время компиляции, и беспокоитесь о том, что вы представляете максимальную величину или максимальное целое число. И даже тогда работа была сделана для того, чтобы большие целые числа хорошо играли с представлениями с плавающей точкой.

Ответ 3

Что? Непонятный ответ? Номера

Ответ 4

Я нашел это письмо на сайте пользователей lua

Ядро Lua не использует 64-битные типы данных, за исключением неявно через size_t или ptrdiff_t (которые 64-разрядные 64 бит).

sizeof (float) == 4
   sizeof (double) == 8

Вы можете определить lua_Number как double (по умолчанию), float или любое целое число с не менее 32 бит. Есть побочные эффекты, хотя и некоторые расширения могут перестать работать из-за ограниченного диапазона поплавков или ints. Ядро должно быть хорошо.

Ответ 5

Использование Lua5.1 или Lua5.2

Максимальное отформатированное число:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368

Если вы измените значение 68 на 69 в конце, он покажет только 68. Число, большее, чем число, возвращает math.huge aka inf.

Что равно: 1.8x10 ^ 308 или к югу от 2 ^ 1024.

Попробуйте сами:

print(string.format("%.0f",number))