Qual è la libreria di grandi numeri standard (o meglio supportata) per la precisione arbitraria di Lua?

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

  •  08-07-2019
  •  | 
  •  

Domanda

Sto lavorando con grandi numeri che non posso aver arrotondato. Usando la libreria matematica standard di Lua, non sembra esserci un modo conveniente per preservare la precisione oltre un limite interno. Vedo anche che ci sono diverse librerie che possono essere caricate per funzionare con grandi numeri:

  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 (potrebbe essere identico a # 2)
  4. http://www.gammon.com.au/scripts/ doc.php? general = lua_bc (ma non riesco a trovare alcuna fonte)

Inoltre, ci sono molte librerie in C che potrebbero essere chiamate da Lua, se i vincoli erano stabiliti.

Hai avuto esperienza con una o più di queste librerie?

È stato utile?

Soluzione

La libreria lmapm di Luiz Figueiredo, una degli autori della lingua Lua.

Altri suggerimenti

Utilizzando invece lbc di lmapm sarebbe più semplice perché lbc è autonomo.

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)

Ho usato il suggerimento di Norman Ramsey per risolvere il problema di Project Euler # 16 . Non credo sia uno spoiler dire che il nocciolo del problema sta calcolando accuratamente un intero di 303 cifre.

Ecco i passaggi necessari per installare e utilizzare la libreria:

  1. Lua deve essere creato con il caricamento dinamico abilitato. Uso Cygwin, ma ho modificato PLAT in src / Makefile in linux . L'impostazione predefinita, none , non abilita il caricamento dinamico.

  2. MAMP deve essere costruito e installato da qualche parte che il tuo compilatore C può trovarlo. Ho inserito libmapm.a in / usr / local / lib / . Il prossimo m_apm.h e m_apm_lc.h sono andati su /usr/local/include/.

  3. Il makefile per lmamp necessita da modificare nella posizione corretta delle librerie Lua e MAMP. Per me questo significa decommentare la seconda dichiarazione di LUA , LUAINC , LUALIB e LUABIN e modificare la dichiarazione di MAMP .

  4. Infine, mapm.so deve essere posizionato da qualche parte che Lua lo troverà. L'ho messo su /usr/local/lib/lua/5.1/.

Grazie a tutti per i suggerimenti!

Non posso davvero rispondere, ma aggiungerò LGMP , un'associazione GMP. Non utilizzato.

Non è il mio campo di competenza, ma mi aspetterei che la libreria aritmetica a precisione multipla GNU sia piuttosto uno standard qui, no?

Sebbene non precisione arbitraria , Lua decNumber , a Lua 5.1 wrapper per IBM decNumber, implementa la proposta di standard aritmetico decimale generale IEEE 754r. Ha gli operatori aritmetici di Lua 5.1 e altro, il pieno controllo delle modalità di arrotondamento e la precisione di lavoro fino a 69 cifre decimali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top