Quelle est la bibliothèque standard (ou mieux prise en charge) des grands nombres (précision arbitraire) pour Lua?
Question
Je travaille avec des nombres importants que je n'aurais pas pu arrondir. À l'aide de la bibliothèque mathématique standard de Lua, il semble n'y avoir aucun moyen pratique de préserver la précision au-delà d'une limite interne. Je vois aussi qu'il y a plusieurs bibliothèques qui peuvent être chargées pour travailler avec de grands nombres:
- 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 (peut être identique à # 2)
- http://www.gammon.com.au/scripts/ doc.php? general = lua_bc (mais je ne trouve aucune source)
De plus, il existe de nombreuses bibliothèques en C pouvant être appelées. de Lua, si les liaisons ont été établies.
Avez-vous déjà utilisé une ou plusieurs de ces bibliothèques?
La solution
La bibliothèque lmapm de Luiz Figueiredo, une des auteurs de la langue Lua.
Autres conseils
Utilisation de lbc à la place de lmapm serait plus facile car lbc est autonome.
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)
J'ai utilisé la suggestion de Norman Ramsey pour résoudre le problème du projet Euler # 16 . Je ne pense pas que ce soit un spoiler que de dire que le noeud du problème consiste à calculer un nombre entier à 303 chiffres avec précision.
Voici les étapes nécessaires pour installer et utiliser la bibliothèque:
-
Lua doit être construit avec le chargement dynamique activé. J'utilise Cygwin, mais j'ai changé
PLAT
danssrc / Makefile
pour devenirlinux
. La valeur par défautnone
n'active pas le chargement dynamique. -
Le MAMP doit être créé et installé. quelque part que votre compilateur C peut le trouver. Je mets
libmapm.a
dans/ usr / local / lib /
. Suivantm_apm.h
etm_apm_lc.h
dans/ usr / local / include /
. -
Le fichier Make pour les lmamp être modifié à l'emplacement correct des bibliothèques Lua et MAMP. Pour moi, cela revient à supprimer la deuxième déclaration de
LUA
,LUAINC
,LUALIB
etLUABIN
et à modifier la déclaration. deMAMP
. -
Enfin,
mapm.so
doit être placé à un endroit où Lua le trouvera. Je le mets à/usr/local/lib/lua/5.1 /
.
Merci à tous pour vos suggestions!
Je ne peux pas vraiment répondre, mais je vais ajouter LGMP , une liaison GMP. Non utilisé.
Ce n'est pas mon domaine d'expertise, mais je m'attendrais à ce que la bibliothèque d'arithmétique à précision multiple de GNU soit un standard, non?
Bien que ce ne soit pas une précision arbitraire , Lua decNumber , une Lua 5.1 wrapper pour IBM decNumber, implémente la norme proposée IEEE 754r d’arithmétique générale décimale. Il dispose des opérateurs arithmétiques Lua 5.1 et plus, d’un contrôle total des modes d’arrondi et d’une précision de travail jusqu’à 69 chiffres décimaux.