Calculer le nombre Pi en ligne de commande sous Linux


Calculatrice
Sous Linux et UNIX, le programme bc est une sorte de calculatrice en ligne de commande. Il est très pratique pour effectuer des opérations arithmétiques simples dans des scripts shell (addition, soustraction, etc.). Si on parcourt sa page de manuel (man bc), les auteurs donnent une petite astuce pour calculer le nombre Pi.

The

Voici un extrait de ce que l'on peut lire :

In /bin/sh,  the following will assign the value of "pi" to the shell variable pi.
               pi=$(echo "scale=10; 4*a(1)" | bc -l)

Analysons cette commande plus en détails :

  • scale=10 : cette option permet d'indiquer le nombre de chiffres après la virgule que l'on souhaite dans le résultat
  • 4*a(1) : c'est l'une des formules mathématiques qui permet de calculer le nombre Pi. Celle-ci se base sur la fonction Arc Tangente a().
  • bc -l : on envoie la formule mathématique à la commande bc, pour que celle-ci effectue le calcul. L'option -l permet de charger la librairie mathématique standard, nécessaire pour utiliser la fonction Arc Tangente a().

Donc, si on veut calculer le nombre Pi à la 10000 ème décimale près, on peut utiliser cette commande :

$ time echo "scale=10000; 4*a(1)" | bc -l
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610
...
...
real    1m48.511s
user    1m48.031s
sys    0m0.007s

Ici, il m'aura fallu moins de deux minutes pour effectuer le calcul sur un processeur Intel Core i7.

A noter que le dernier record de calcul de Pi, à l'heure où j'écris ces lignes, date du mois d'août 2010. Celui-ci a été établi par deux informaticiens (un japonais et un américain) avec 5 000 milliards de décimales après la virgule.


9 Commentaires pour "Calculer le nombre Pi en ligne de commande sous Linux"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    merci pour l'astuce, j'adooore
    inutile donc indispensable

    RépondreRépondre
    meiko , le 15 mai 2012 à 21:30
  •  

    Yep, pareil :P

    RépondreRépondre
    Tdey , le 15 mai 2012 à 21:39
  •  

    Remarque: Pi est un nombre, pas un chiffre

    RépondreRépondre
    neolao , le 15 mai 2012 à 22:30
  •  

    @neola : ok, j'ai changé le titre du coup.

    RépondreRépondre
    pti-seb , le 16 mai 2012 à 00:07
  •  

    Nombre pas Chiffre.
    Pi est un nombre. Les chiffres sont les symboles d’écritures des nombres.

    De plus c'est une astuce pour utilisé Pi dans bc, il ne me semble pas que ce soit une astuce intéressante pour calculer Pi lui-même.
    Tangente et ArcTangente sont des fonction liées à Pi, comme toutes les fonctions trigonométriques, elle ne sont donc pas calculées magiquement de manière exacte, mais par des algos, qui ont donc une complexité intrinsèque qui va vite grimper avec le nombre de décimales.
    Il me semble que l'algo le plus efficace d'ArcTan se base sur 1/(1+x²), ce qui n'est pas le cas de l'algo le plus efficace pour les décimales de Pi.
    Cette astuce permet de gagner du temps et de ne pas réinventer la roue, pour une simple calculatrice basique en utilisant une fonction déjà présente dans la machine et dont l'efficacité est clairement suffisante pour la précision que demande les utilisateurs de bc.
    Je ne me lancerais pas dans le calcul de plus d'une centaine de décimales avec cette méthode, qui risque de devenir très gourmande et de donner quelques décimales fausse sur la fin...

    RépondreRépondre
    Nottingham , le 16 mai 2012 à 00:12
  •  

    Excellent merci :-)

    Je viens de faire un essai et il faut 2m41sec pour calculer la 10000eme décimal de pi avec mon processeur Intel core i3... Not bad!

    Par curiosité j'ai comparé le résultat est c'est tout à fait correct, ce qui confirme que l'algorithme utilisé par BC est très puissant et approprié.

    Vous pouvez donc utilisé BC en toute sécurité la prochaine fois que vous calculerez la trajectoire de votre sonde cosmique à destination de Jupiter.

    http://www.wolframalpha.com/input/?i=what+is+the+10000+decimal+of+pi

    RépondreRépondre
    Virtualmix , le 16 mai 2012 à 10:25
  •  

    @Virtualmix : sympa ta technique pour vérifier les décimales. J'y avais pas pensé.

    @all : la commande bc à quand même quelques limites. Si on cherche à calculer une décimale trop grane, on se prend un "out of memory". Donc cette astuce, c'est juste pour le fun, pas pour battre des records.

    RépondreRépondre
    pti-seb , le 16 mai 2012 à 12:30
  •  

    À noter qu'en pratique, une quarantaine de décimales suffisent pour calculer la circonférence de l'univers observable, à un atome d'hydrogène près.

    Donc au delà (et même bien avant), on est vraiment dans le benchmark, sans réelle utilité.

    RépondreRépondre
    ianux , le 15 octobre 2014 à 03:51
  •  

    Bonjour

    Merci à tous pour votre érudition en calcul.

    Ancien logicien, j'ai suivi de loin les travaux du groupe Twist21 sur les techniques de calcul des fonctions non primitives récursives, la première candidate étant bien sûr celle d'Ackermann.

    L'un des doctes contributeurs sur ce forum tux planet saurait-il proposer une alternative optimisées par rapport à celle qu'a proposé Pollux lors du colloque du 02/11.

    Pour rappel, on peut écrire comme suit la fonction d'Ackermann (j'utilise la syntaxe du C, je pense compréhensible par la majorité) :

    int mybr( long m, long n)
    {

    if (m == 0)
    {
    return n + 1;
    }
    else if (n == 0)
    {
    return mybr(m - 1, 1);
    }
    else
    {

    return mybr(m - 1, mybr(m, n - 1));
    }
    }

    ==> Jusqu'ici rien de surprenant, tout béotien connait cette fonction.

    Par contre, ce qui m'a séduit, c'est l'implémentation en perl faite par cora.hammser et son calcul de ack(8,21) en moins de 82449 heures sur un pentium simple processeur cadencé à 1.1 Ghz.

    Les contributeurs sur ce site disposeraient-ils aussi d'une implémentation "supra-optimisée" pour reprendre les termes de la ravissante et fort brillante Cora ?

    Si oui, pourraient-ils nous en faire profiter.

    La fonction d'Ackermann ne loge qu'au premier étage des fonctions NPR, Cora a aussi mis au point un algo pour calcul de fonction (sur entiers uniquement) des NPR niveau 2 et 3.

    Toutes connaissances sur le sujet m'intéresse fortement.

    MErci à tous.

    Apollon4

    RépondreRépondre
    apollon4 , le 13 novembre 2014 à 17:00
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité redhat red hat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum