2009-05-04 15 views
0

J'ai toujours été curieux: comment puis-je effectuer des opérations arithmétiques sur des décimales très longues - par exemple, calculer pi à la 3000e décimale (en particulier dans un langage impératif)?Opérations arithmétiques sur des décimales très, très longues

+0

Quelle langue utilisez-vous? C'est spécifique à la langue en raison des API que vous pourriez avoir pour les opérations bignum. – Noldorin

+0

C#/VB ......... – Daniel

Répondre

3

Utilisez un langage ou une bibliothèque qui prend en charge les nombres de précision arbitraires ...?

En Python, ints fera automatiquement la promotion des longs qui sont de taille arbitraire. Vous pouvez utiliser une seconde valeur pour garder une trace du nombre de décimales sur lesquelles passer pour obtenir une sorte de virgule flottante de précision arbitraire.

En Java, vous pouvez utiliser la classe BigDecimal, qui représente «Immutable, nombres décimaux signés de précision arbitraire». Je suis sûr que d'autres exemples existent dans d'autres langues.

0

Vous devez travailler avec les données au niveau des chiffres (par exemple, calculer chaque chiffre de manière incrémentielle ou déterministe) ou définir de nouvelles structures de données ayant un nombre suffisant de bits pour fournir une précision adéquate.

3

Pour les langages qui ne supportent pas les calculs sur bignums, il y a souvent des bibliothèques. Vous pouvez jeter un oeil à GMP, par exemple. Les docs vous donneront des indications sur certaines approches algorithmiques typiques.

Faire des algorithmes de calcul bignum est difficile rapide, donc il y a quelques assez alambiquée là-bas ...