¿Cuál es la biblioteca estándar (o mejor soportada) de gran número (precisión arbitraria) para Lua?

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

  •  08-07-2019
  •  | 
  •  

Pregunta

Estoy trabajando con grandes números que no puedo haber redondeado. Usando la biblioteca matemática estándar de Lua, parece que no hay una forma conveniente de preservar la precisión más allá de algún límite interno. También veo que hay varias bibliotecas que se pueden cargar para trabajar con 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 (puede ser idéntico al # 2)
  4. http://www.gammon.com.au/scripts/ doc.php? general = lua_bc (pero no puedo encontrar ninguna fuente)

Además, hay muchas bibliotecas en C que podrían llamarse de Lua, si se establecieron los enlaces.

¿Ha tenido alguna experiencia con una o más de estas bibliotecas?

¿Fue útil?

Solución

La biblioteca lmapm por Luiz Figueiredo, uno de los autores del lenguaje Lua.

Otros consejos

Usando lbc en su lugar de lmapm sería más fácil porque lbc es autónomo.

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)

Utilicé la sugerencia de Norman Ramsey para resolver el problema del Proyecto Euler # 16 . No creo que sea un spoiler decir que el quid del problema es calcular con precisión un entero de 303 dígitos.

Estos son los pasos que necesitaba para instalar y usar la biblioteca:

  1. Lua necesita ser construido con carga dinámica habilitada. Uso Cygwin, pero cambié PLAT en src / Makefile para que sea linux . El valor predeterminado, none , no permite la carga dinámica.

  2. El MAMP debe construirse e instalarse en algún lugar donde tu compilador de C pueda encontrarlo. Puse libmapm.a en / usr / local / lib / . Luego m_apm.h y m_apm_lc.h fueron a /usr/local/include/.

  3. El makefile para lmamp necesita para ser alterado a la ubicación correcta de las bibliotecas Lua y MAMP. Para mí, eso significa descomentar la segunda declaración de LUA , LUAINC , LUALIB y LUABIN y editar la declaración de MAMP .

  4. Finalmente, mapm.so necesita colocarse en algún lugar donde Lua lo encuentre. Lo puse en /usr/local/lib/lua/5.1/.

¡Gracias a todos por las sugerencias!

Realmente no puedo responder, pero agregaré LGMP , un enlace GMP. No utilizado.

No es mi campo de especialización, pero esperaría que la biblioteca aritmética de precisión múltiple GNU sea un estándar aquí, ¿no?

Aunque no es precisión arbitraria , Lua decNumber , un Lua 5.1 wrapper para IBM decNumber, implementa el estándar propuesto de Aritmética Decimal General IEEE 754r. Tiene los operadores aritméticos Lua 5.1 y más, control total sobre los modos de redondeo y precisión de trabajo de hasta 69 dígitos decimales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top