Qual é o padrão (ou melhor suportado) grande número (de precisão arbitrária) biblioteca para Lua?

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando com grandes números que eu não posso ter off arredondado. Usando biblioteca de matemática padrão de Lua, parece haver nenhuma maneira conveniente para preservar a precisão passado algum limite interno. Vejo também existem várias bibliotecas que podem ser carregados para trabalhar com grandes números:

  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 (pode ser idêntico ao # 2)
  4. http://www.gammon.com.au/scripts/ doc.php dentro? geral = lua_bc (mas não consigo encontrar qualquer fonte)

Além disso, há muitas bibliotecas em C que poderia ser chamado da Lua, se as ligações onde estabelecidos.

Você já teve alguma experiência com uma ou mais dessas bibliotecas?

Foi útil?

Solução

O lmapm biblioteca por Luiz Figueiredo, um dos autores da linguagem Lua.

Outras dicas

Usando lbc vez de lmapm seria mais fácil porque lbc é auto-suficiente.

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)

Eu usei a sugestão de Norman Ramsey para resolver o problema projeto Euler # 16 . Eu não acho que é um spoiler dizer que o cerne do problema está calculando um número inteiro de 303 dígitos com precisão.

Aqui estão os passos que necessários para instalar e usar a biblioteca:

  1. Lua precisa ser construído com carregamento dinâmico habilitado. Eu uso o Cygwin, mas eu mudei PLAT em src/Makefile ser linux. O padrão, none, não permite o carregamento dinâmico.

  2. O MAMP precisa ser construído e instalado em algum lugar que o seu compilador C pode encontrá-lo. Coloquei libmapm.a em /usr/local/lib/. Próxima m_apm.h e m_apm_lc.h foi para /usr/local/include/.

  3. O makefile para lmamp necessidades de ser alterada para a localização correcta das bibliotecas Lua e MAMP. Para mim, isso significa que descomentando a segunda declaração de LUA, LUAINC, LUALIB e LUABIN e editar a declaração de MAMP.

  4. Finalmente, mapm.so precisa ser colocado em algum lugar que Lua vai encontrá-lo. Eu colocá-lo em /usr/local/lib/lua/5.1/.

Obrigado a todos pelas sugestões!

Eu realmente não posso responder, mas vou acrescentar LGMP , uma ligação de GMP. Não usado.

Não minha área de especialização, mas eu esperaria que o múltiplo de precisão biblioteca aritmética GNU a ser bastante um padrão aqui, não?

Apesar de não ser arbitrária precisão, Lua decNumber , a Lua 5.1 wrapper para IBM decNumber, implementa a proposta 754r Geral Decimal aritmética padrão IEEE. Tem as Lua 5.1 operadores aritméticos e muito mais, o controle total sobre o arredondamento modos, e precisão de trabalho de até 69 dígitos decimais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top