Armpi 4 est un programme de calcul de π en décimal pour les processeurs ARM (en particulier pour le Risc PC d'Acorn). C'est le successeur d'Armpi 3. La plupart des explications sont données dans le document relatif à la version 3; seuls les changements sont donnés ici.
Comme avec la version 3, le source assembleur est donné dans un fichier séparé. Des scripts Perl permettent d'extraire du fichier donné ici le source assembleur conforme à la syntaxe standard ou le source au format extASM. Un autre script Perl crée un programme BASIC (pour le Risc PC) à partir du source assembleur renvoyé par le premier script (syntaxe standard).
Seule la conversion en base 10 a été modifiée. Il y a deux modifications principales:
La division par 4 s'effectue un peu comme la division par 2, excepté les
antiretenues
(appelées ainsi car elles correspondent aux retenues
dans la multiplication par 4). Lorsqu'un chiffre (entre 0 et 27) est divisé
par 4, on obtient un quotient pouvant aller de 0 et 6 et un reste entre 0
et 3. Un reste égal à r génère deux antiretenues respectivement
égales à 2r et à 5r pour les deux chiffres suivants.
Une valeur pouvant aller jusqu'à 21 est donc ajoutée à chaque chiffre, et
on vérifie ainsi que les chiffres ne peuvent pas dépasser 27. En ce qui
concerne l'implémentation, les antiretenues sont en fait ajoutées parfois
avant, parfois après la division du chiffre par 4 (dans le premier cas,
les antiretenues sont évidemment multipliées par 4), et le code est
particulièrement optimisé; la meilleure façon de voir comment ça marche
est de prendre des exemples et de faire tourner le code dessus...
200 000 décimales ont été calculées en 6 heures 54 minutes 4 secondes: le calcul en binaire a pris 3 heures 47 minutes 12 secondes et la conversion en base 10 a pris 3 heures 6 minutes 52 secondes.
Les comparaisons avec les autres ordinateurs et autres programmes de calcul de π que j'ai écrits sont données dans un fichier séparé; tous les programmes jusqu'à Armpi 4 utilisent la même formule, mais les algorithmes de calculs sont assez différents.