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

StackOverflow https://stackoverflow.com/questions/288707

  •  08-07-2019
  •  | 
  •  

Вопрос

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

<Ол>
  • http://oss.digirati.com.br/luabignum/
  • http://www.tc.umn.edu/~ringx004/ mapm-main.html
  • http://lua-users.org/lists/ lua-l / 2002-02 / msg00312.html (может совпадать с # 2)
  • http://www.gammon.com.au/scripts/ doc.php? general = lua_bc (но я не могу найти источник)
  • Кроме того, существует множество библиотек в 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 десятичных цифр.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top