Что такое стандартная (или лучше всего поддерживаемая) библиотека больших чисел (произвольная точность) для Lua? - PullRequest
20 голосов
/ 14 ноября 2008

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

  1. http://oss.digirati.com.br/luabignum/
  2. http://www.tc.umn.edu/~ringx004/mapm-main.html
  3. http://lua -users.org / lists / lua-l / 2002-02 / msg00312.html (может совпадать с # 2)
  4. http://www.gammon.com.au/scripts/doc.php?general=lua_bc (но я не могу найти источник)

Далее, есть много библиотек в C, которые можно было бы вызвать из Lua, если привязки были установлены.

Был ли у вас опыт работы с одной или несколькими из этих библиотек?

Ответы [ 5 ]

15 голосов
/ 14 мая 2009

Использование 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)
6 голосов
/ 07 марта 2009

Я воспользовался предложением Нормана Рэмси для решения задачи Project Euler # 16 . Я не думаю, что это спойлер, чтобы сказать, что суть проблемы заключается в точном вычислении 303-значного целого числа.

Вот шаги, которые мне потребовались для установки и использования библиотеки:

  1. Необходимо создать Lua с включенной динамической загрузкой. Я использую Cygwin, но я изменил PLAT в src/Makefile на linux. По умолчанию none не включает динамическую загрузку.

  2. MAMP должен быть собран и установлен где-нибудь так, чтобы ваш компилятор C мог его найти. Я положил libmapm.a в /usr/local/lib/. Далее m_apm.h и m_apm_lc.h перешли к /usr/local/include/.

  3. Makefile для lmamp необходимо изменить, указав правильное расположение библиотек Lua и MAMP. Для меня это означает, что нужно раскомментировать второе объявление LUA, LUAINC, LUALIB и LUABIN и отредактировать объявление MAMP.

  4. Наконец, mapm.so нужно разместить где-нибудь, чтобы Луа его нашел. Я поставил его на /usr/local/lib/lua/5.1/.

Спасибо всем за предложения!

6 голосов
/ 29 ноября 2008

Библиотека lmapm Луиса Фигейредо, одного из авторов языка Lua.

5 голосов
/ 14 ноября 2008

Не могу ответить, но добавлю LGMP , привязку GMP. Не используется.

Не моя область знаний, но я бы ожидал, что арифметическая библиотека GNU с множественной точностью будет вполне стандартом, не так ли?

3 голосов
/ 15 ноября 2008

Хотя не произвольная точность, Lua decNumber , оболочка Lua 5.1 для IBM decNumber, реализует предложенный стандарт общей десятичной арифметики IEEE 754r. Он имеет арифметические операторы Lua 5.1 и более, полный контроль над режимами округления и точность обработки до 69 десятичных цифр.

...