Depuis que je suis l'auteur de la y-cruncher programme que vous évoquez, je vais ajouter mes 2 cents.
Pour une telle tâche, les deux principaux obstacles qui doivent être abordées sont les suivantes:
- De mémoire
- Au moment de l'exécution de la Complexité
De mémoire
2 billions de dollars de chiffres est extrême - pour dire le moins. C'est le double de l' actuel record établi par Shigeru Kondo et moi-même de retour en 2010. (Il nous a fallu plus de 9 jours pour calculer 1 billion de dollars de chiffres d'utiliser y-cruncher.)
En texte brut, c'est environ 1,8 TiB en décimal. Dans les paniers représentation binaire, c'est 773 GiB.
Si vous allez faire de l'arithmétique sur les nombres de cette taille, vous allez avoir besoin d' 773 GiB pour chaque opérande pas de comptage à zéro de la mémoire.
Mises en parler, y-cruncher a réellement besoin 8.76 TiB de mémoire pour faire ce calcul tous dans la ram. Vous pouvez donc vous attendre à d'autres implémentations besoin de la donner ou de prendre un facteur de 2 au plus.
Cela dit, je doute que tu vas avoir assez de ram. Et même si vous l'avez fait, il serait fortement NUMA. Donc l'alternative est d'utiliser le disque. Mais ce n'est pas anodin, car pour être efficace, vous avez besoin pour traiter de la mémoire comme mémoire cache et de la microgestion de toutes les données qui sont transférées entre la mémoire et le disque.
Au moment de l'exécution de la Complexité
Ici nous avons un autre problème. Pour 2 billions de dollars de chiffres, vous allez avoir besoin d'un très rapide de l'algorithme. Pas n'importe quel algorithme rapide, mais une quasi-linéaire au moment de l'exécution de l'algorithme.
Votre tentative s'étend en O(N^2)
. Donc, même si vous avez eu assez de mémoire, il n'arrive pas à terminer dans votre vie.
L'approche standard pour le calcul de e
de haute précision s'exécute en O(N log(N)^2)
et combine les algorithmes suivants:
Heureusement, GMP utilise déjà FFT grande multiplication. Mais il manque deux caractéristiques fondamentales:
- Out-of-core (swap) de calcul à utiliser le disque quand il n'y a pas assez de mémoire.
- Il n'est pas parallélisé.
Le second point n'est pas important puisque vous pouvez simplement attendre plus longtemps. Mais pour toutes fins utiles, vous êtes probablement va avoir besoin pour le déploiement de votre propre. Et c'est ce que j'ai fait quand j'ai écrit y-cruncher.
Cela dit, il ya beaucoup d'autres lâche-ends et qui doivent également être pris en charge de:
- La finale de la division nécessitera un algorithme rapide comme la Méthode de Newton.
- Si tu vas calculer en binaire, vous allez avoir besoin de faire une base de conversion.
- Si le calcul est va prendre beaucoup de temps et beaucoup de ressources, vous pouvez avoir besoin pour mettre en œuvre la tolérance de pannes pour gérer les pannes de matériel.