Curriculum and Labs for Engineering Education

cancel
Showing results for 
Search instead for 
Did you mean: 

Challenge mathématiques #5 : Calcul des décimales de PI

Bonjour à tous,

Je continue cette fois (à la place de Maxime), je propose pour le 5ème sujet des challenges mathématiques avec LabVIEW, de calculer le plus rapidement possible les fascinantes décimales de PI. Pour ce petit challenge, 2000 décimales au maximum suffiront. Ce ne sont pas les algorithmes ni méthodes qui manquent sur le net, mais le défi est d’optimiser le code afin de les calculer le plus vite possible. Bien évidemment, donner jusqu’à 2000 décimales exactes dépasse la capacité des flottants, aussi il faudra un algorithme qui les fournit séparément sous forme de chaîne de caractères dans un format texte. L’algorithme doit être capable (et optimisé) pour des décimales allant de 100 à 2000, valeur qui sera choisie arbitrairement lors du bench final.


Méthode d’évaluation :


Le code d’évaluation est fourni pour tester son algorithme, mais seul celui du PC de test servira à l’évaluation finale.

·         - Utiliser le VI d’évaluation : Challenge_PI_Juillet 2013.vi  (version fournie en LV 2010)

·         - Réaliser un sous-VI en utilisant le modèle fourni et en le renommant avec votre pseudo précédé de « Main_ » donc comme ceci : « Main_votre Pseudo.vi »

·         - Ne pas modifier les terminaux ni le type du VI car votre solution sera appelée dans le VI d’évaluation du PC de test avec le nom des étiquettes du modèle

·         - Le calcul ne s’effectue que sur une seule passe (vu le temps déjà nécessaire)

·         - Le temps est calculé en unités de ms car après quelques tests cela ne doit pas prendre normalement des heures

·         - Les tests seront effectués plusieurs fois en fonction du temps du code… ce qui permettra d’envisager un temps moyen ou de vous départager en cas de résultats serrés.


Bien entendu :

·         - Pas de tableaux de PI utilisés en constante ni de valeurs de résultats en mémoire

·         - Pas d’exécutables

·         - Ne pas utiliser de bibliothèques externes (DLL,etc..), uniquement des fonctions natives de la bibliothèque LabVIEW

·         - Sont acceptés des calculs appelés par nœud Mathscript ou écrits dans la boîte de calcul

·         - Pensez à commenter votre code pour ceux qui souhaitent valider la méthode de calcul et l’optimisation utilisée (visible par tout le monde)

·         - Tous les VIs seront ensuite mis à disposition pour tous

·         - Si vous le souhaitez, signez avec votre Pseudo votre code en commentaires dans le diagramme !

Machine utilisée pour le test :


PC portable DELL E6510

Windows 7 professionnel 64 bits en français

Core i7 Q 740 1,73 Ghz (4 cœurs) avec 8 Go de RAM

LabVIEW 2012 32 bits français


Résultats attendus :


Le résultat sous forme de chaîne de caractères doit correspondre au chiffre près au tableau fourni et validé par la LED Verte. Le vainqueur est celui qui à le temps de calcul total le plus court.


Comment envoyer son code :


La date limite de participation est fixée au 1er août 2013.


Envoyez-moi votre code par Email à (emmanuel.roset@ni.com). Il suffit de fournir uniquement un dossier (de préférence compressé) nommé avec votre Pseudo avec votre code autonome et les sous-VIs. Pensez à nommer le VI principal « Main_votre Pseudo.vi » comme indiqué précédemment. (Pas besoin du code d’évaluation Challenge_PI_Juillet 2013.vi).


Ce qui est en jeu :


Votre compétence de développeur LV !

Le vainqueur de ce challenge gagnera une certification gratuite de son choix !


Bonne chance et n’hésitez pas à poster des questions et à partager vos soucis de codage sur la communauté !

Modification du 07/072013

Pièce jointes des codes en version LabVIEW 2010 et LabVIEW 2011

Main_votre Pseudo n'est plus en exécution de priorité Sous-programme

Résultats du challenge au 01/08/2013 :

Bravo !

Le vainqueur est Nico_EMC qui a brillamment utilisé la formule :

\frac1{\pi}=\frac{2 \sqrt 2}{9801}\sum_{k=0}^\infty\frac{(4k)!(1103+26390k)}{(k!)^4 396^{4k}}\!

Le temps sur le PC de test pour 2000 décimales est de 309,972 secondes et n'a pas de concurrents !

Resultats Nico_EMC.png

Pour information, un code similaire a été réalisé lors du même challenge LabVIEW aux états unis qui donne un résultat en 12,752 secondes. Il sera joint en pièce jointe également.

merci à Nico_EMC pour sa participation et il sera bientôt contacté pour le prix.

Emmanuel

05/09/2013 : Nouvelle réception d'un code pour PI en 200 ms

Bon, les vacances sont passées et j'ai reçu de "Bleses" un code qui le fait d'une manière alluciante en 200 ms pour 2000 décimales !!

et qui reste relativement simple en travaillant sur des grand nombres. Je le met en pièce jointe nommé PI_Bleses

merci à lui et je l'encourage à le présenter si il le souhaite.


Comments
emmanuel-fr
Member
Member
on

C'est trop dur ? besoin de liens vers des idées ? Ce n'est pas infaisable loin de là, cependant l'optimisation multitâches en LabVIEW va surement jouer un peu, en plus du choix crucial du bon l'algorithme de départ.

Cordialement,

Nico_EMC
Member
Member
on

Bonjour Emmanuel

Il y a un problème : le vi Main tel qu'il est défini ne fonctionne pas dans "Challenge_PI_Juillet 2013" : j'ai l'erreur 1035 (sous labview 2011) :

"L'erreur 1035 s'est produite à : Nœud de méthode dans Challenge_PI_Juillet 2013.vi

Raisons possibles :

LabVIEW:  Ce type de VI ne peut pas effectuer ce type d'opération.

Nom de la méthode : Exécuter le VI"

A part ça, mon code est prêt

emmanuel-fr
Member
Member
on

Merci Nico_EMC, c'est super ! Ma version est LabVIEW 2012, aussi j'ai placé en pièce jointe séparées les différents codes en espérant solutionner le problème. J'ai également retiré l'attribution de l'exécution en priorité sous-programme.

emmanuel-fr
Member
Member
on

Le problème est il résolu ?  merci

Nico_EMC
Member
Member
on

Oui, le VI fonctionne correctement. Je peaufine les dernières modifs, et je l'envoi

emmanuel-fr
Member
Member
on

Merci Nico_EMC, j'ai bien recu le code et il fonctionne bien. On verra pour les temps de calculs... mais déjà, bravo !

emmanuel-fr
Member
Member
on

A tous, il reste un peu moins de 15 jours pour trouver comment calculer  <2000 décimales, courage ! une certification reste en jeu

emmanuel-fr
Member
Member
on

C'est le dernier jour pour m'envoyer vos réflexions et codes, ensuite je publie les résultats

Marie_Remondière
NI Employee (retired)
on

Hello les amis,

J'ai l'impression que ce challenge vous a pas tellement inspiré, je me trompe ? Vous pouvez nous dire pourquoi ? Si c'était trop compliqué, trop long ?

Aussi si vous voulez poster votre propre challenge n'hésitez pas

merci

Marie

Mathieu.
Member
Member
on

Salut Marie,

Je vais essayer de donner qelques pistes de réponses à tes interrogations... (du moins en ce qui me concerne)

Pour ma part,bien que j'ai suivi (de loin je l'avoue )  tous les échanges autour de ce challenge #5, je dirais que la période n'était pas propice pour que je me penche dessus...

Et oui, avec les périodes de congés (attendons encore 2 jours ) et nos clients qui attendent des livrables justement avant le couperet fatidique, les mois de Juillet (et Aout) sont toujours un peu délicat.

J'ai bien passé quelques soirées (voires nuits) à faire du LabVIEW mais uniquement dans le cadre professionel... et si en plus les moments de libre je les passe à m'amuser avec PI alors là vraiment j'aurais l'impression d'être constamment au bureau. De plus coder avec un verre de rosé à l'apéro dans une main et les boules de pétanque dans l'autre ça devient compliqué : à quand une version de LabVIEW programmable par la pensée ?

En espérant tout de même que les quelques participants ont été prolifiques sur le sujet !

To be continued...

Cordialement,

Mathieu O.
Certified LabVIEW Architect - CLA (2013)
emmanuel-fr
Member
Member
on

Bravo Nico_EMC, c'est mérité

Nico_EMC
Member
Member
on

Merci Emmanuel.

300s au lieu de 12, heureusement que la concurence n'était pas rude .

Contributors