Ответ 1
библиотека lmapm Луиса Фигейредо, одного из авторов языка Lua.
Я работаю с большими числами, которые я не могу округлить. Используя стандартную математическую библиотеку Lua, похоже, нет удобного способа сохранить точность за пределами некоторого внутреннего предела. Я также вижу, что есть несколько библиотек, которые можно загружать для работы с большими номерами:
Кроме того, есть много библиотек в C, которые могут быть вызваны из Lua, если привязки, которые установлены.
У вас был опыт работы с одной или несколькими из этих библиотек?
библиотека lmapm Луиса Фигейредо, одного из авторов языка Lua.
Использование lbc вместо lmapm было бы проще, потому что lbc является автономным.
require"bc"
s=bc.pow(2,1000):tostring()
z=0
for i=1,#s do
z=z+s:byte(i)-("0"):byte(1)
end
print(z)
Я использовал предложение Нормана Рэмси решить проблему Эйлера Эйлера # 16. Я не думаю, что это спойлер, чтобы сказать, что суть проблемы состоит в том, чтобы точно вычислить целое число из 303 цифр.
Вот шаги, которые мне нужно для установки и использования библиотеки:
Lua необходимо создать с включенной динамической загрузкой. Я использую Cygwin, но я изменил PLAT
в src/Makefile
на linux
. Значение по умолчанию none
не включает динамическую загрузку.
MAMP необходимо установить и установить где-нибудь, что ваш компилятор C может его найти. Я положил libmapm.a
в /usr/local/lib/
. Затем m_apm.h
и m_apm_lc.h
отправились в /usr/local/include/
.
Файл make для lmamp должен быть изменен для правильного расположения библиотек Lua и MAMP. Для меня это означает раскомментирование второго объявления LUA
, LUAINC
, LUALIB
и LUABIN
и редактирование объявления MAMP
.
Наконец, mapm.so
нужно разместить где-нибудь, что найдет Lua. Я положил его на /usr/local/lib/lua/5.1/
.
Спасибо всем за предложения!
Я не могу ответить, но я добавлю LGMP, привязку к GMP. Не используется.
Не моя область знаний, но я бы ожидал, что библиотека арифметических данных с множественной точностью GNU будет довольно стандартным здесь, нет?
Хотя не произвольная точность, Lua decNumber, оболочка Lua 5.1 для IBM decNumber, реализует предлагаемый общий десятичный арифметический стандарт IEEE 754r. Он имеет арифметические операторы Lua 5.1 и многое другое, полный контроль над режимами округления и рабочую точность до 69 десятичных цифр.