Quelle est la bibliothèque standard (ou mieux prise en charge) des grands nombres (précision arbitraire) pour Lua?

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

  •  08-07-2019
  •  | 
  •  

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:

  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 (peut être identique à # 2)
  4. 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?

Était-ce utile?

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:

  1. Lua doit être construit avec le chargement dynamique activé. J'utilise Cygwin, mais j'ai changé PLAT dans src / Makefile pour devenir linux . La valeur par défaut none n'active pas le chargement dynamique.

  2. Le MAMP doit être créé et installé. quelque part que votre compilateur C peut le trouver. Je mets libmapm.a dans / usr / local / lib / . Suivant m_apm.h et m_apm_lc.h dans / usr / local / include / .

  3. 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 et LUABIN et à modifier la déclaration. de MAMP .

  4. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top