Что такое стандартная (или лучше всего поддерживаемая) библиотека больших чисел (произвольная точность) для 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)
Я использовал предложение Нормана Рэмси для решения проблемы Project Euler # 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 десятичных цифр.