IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

limite de calcul et suite de fibonacci


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut limite de calcul et suite de fibonacci
    Bonsoir tout le monde,

    Je suis actuellement en Maths Spe et pour ceux qui connaissent, je dois travailler sur un TIPE (thème scientifique qui change tous les ans). Cette année, le thème étant entre autre "structures et complexité", je me suis intéressé aux différentes façons pour programmer la suite de Fibonacci, étudier la complexité etc.

    Sauf que je fais face à un gros problème: les termes de la suite étant assez conséquent , pour n = 1400, on a déjà Fn = 1.7e+292, et python, pour des valeurs supérieures à 10^308 renvoie automatiquement l'infini et s'arrête de calculer.
    Y a t-il un moyen pour contourner cette valeur limite? Parce qu'actuellement je ne peux pas calculer de terme supérieur à n =1476

    Merci d'avance!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Salut,

    Citation Envoyé par Fenelon St Marie Voir le message
    Sauf que je fais face à un gros problème: les termes de la suite étant assez conséquent , pour n = 1400, on a déjà Fn = 1.7e+292, et python, pour des valeurs supérieures à 10^308 renvoie automatiquement l'infini et s'arrête de calculer.
    Postez du code et précisez la version de Python utilisée. Comme Python travaille avec des bignum (et que fibonacci c'est sur les entiers) vous ne devriez pas avoir de soucis sinon d'attendre que çà le fasse.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut
    Merci pour votre réponse.
    Je fais fonctionner Spyder avec la version 2.7 de python.
    Voici le code de la version Itérative classique qui me renvoie directement "inf" et arrête le programme quand je dépasse n=1476. J

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import time
     
    def Fibo_brutalI(n):
        u,v = 0.,1.
        for i in range(2,n+1):
            u,v = v,u+v 
     
        return v
     
    tps1 = time.clock()
    print(Fibo_brutalI(1477))
    tps2 = time.clock()
     
    print(tps2 - tps1)
    Désolé pour la mise en forme, j'ai encore un peu de mal avec le site.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Enlève les points après le 0 et le 1.

    PS : quelle drôle d'idée de travailler en python2.7 !

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Python a des possibilités de calcul étonnantes! Avec la correction proposée par marco056, le calcul se fait entièrement en entier.

    A titre d'exemple, voilà le résultat obtenu en 1,3 sec. pour n=100000 (cent mille): un nombre de 20899 chiffres dont voilà le début et la fin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    25974069347221724166155034021275915414880485386517696584724770703952534543511273
    68626555677283671674475463758722307443211163839947387509103096569738218830449305
    22876385313349213530267927895670105127657827163560807305053220024323311438398651
    61378272381247774537783372999162146340500546698603908627509966393664092118901252
    71960172105060300350586894028558103675117658251368377438684936413457338834365158
    ...
    07243970997644514679099338144899464460978095773195360493873495002686056455569322
    42296918156302939224876064708734311663842054424896287602136502469918930401125131
    03835085621908060270866604873585849001704200923929789193938125116798421788115209
    25913043557232163566089560351438388393901895316627435560997001569978028923636234
    9895374653428746875

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Python a des possibilités de calcul étonnantes! Avec la correction proposée par marco056, le calcul se fait entièrement en entier.

    A titre d'exemple, voilà le résultat obtenu en 1,3 sec. pour n=100000 (cent mille): un nombre de 20899 chiffres dont voilà le début et la fin:
    Tu as quoi comme bécane ?
    Chez moi, c'est 0.09772499999999695 secondes avec 100000...

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par marco056 Voir le message
    Tu as quoi comme bécane ?
    Chez moi, c'est 0.09772499999999695 secondes avec 100000...
    J'ai un PC assez puissant (core i7, ram:16GO), et le temps de calcul me semble bon dans tout ce que je fais.

    Mais il y a une différence dans la mesure des temps de calcul entre les différents OS (time.clock() et time.time()).

    Pour l'instant, je suis sous Windows et toi?

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,



    J'ai un PC assez puissant (core i7, ram:16GO), et le temps de calcul me semble bon dans tout ce que je fais.

    Mais il y a une différence dans la mesure des temps de calcul entre les différents OS (time.clock() et time.time()).

    Pour l'instant, je suis sous Windows et toi?

    Tu as raison, je suis sous linux et le comportement est différent (cpu, je crois, pour moi).
    C'était une blague, tu avais le droit d'avoir un vieux pc sous la main...

  9. #9
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par marco056 Voir le message
    tu avais le droit d'avoir un vieux pc sous la main...
    J'ai aussi un vieux PC d'une dizaine d'année (ram:500Mo) qui marche très bien sous Linux Mint v17!

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut
    Merci beaucoup pour toutes vos réponses! Le programme marche effectivement sans soucis pour des très grosses valeurs de n. Pour n = 100 000, j'obtient le résultat en 3.28s avec la fonction time.clock.
    Ca commence à faire une bonne différence avec la machine de marco056, pourtant j'ai un core i3 avec 4G de RAM sous windows et je trouvais ça pas trop mal pour faire du python

    J'ai vu que vous trouviez ça bizarre de programmer sous python 2.7, il y a une grosse différence avec python 3.4?

  11. #11
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Fenelon St Marie Voir le message
    Pour n = 100 000, j'obtient le résultat en 3.28s avec la fonction time.clock.
    Ca commence à faire une bonne différence avec la machine de marco056, pourtant j'ai un core i3 avec 4G de RAM sous windows et je trouvais ça pas trop mal pour faire du python
    Il y a une différence entre Windows et Linux sur ce que mesure time.clock(): je crois que sur Linux, on mesure le temps passé par le seul calcul sur le CPU, ce qui donne un résultat plus faible.

    Citation Envoyé par Fenelon St Marie Voir le message
    J'ai vu que vous trouviez ça bizarre de programmer sous python 2.7, il y a une grosse différence avec python 3.4?
    Python 2.7 marche bien mais est un produit mort: il n'y aura plus aucune évolution.

    Python 3 est sorti il y a 7 ans en décembre 2008,! C'est donc maintenant le Python "normal", et il intègre des améliorations en permanence. La plus connue est le traitement des chaines de caractères: on travaille maintenant en unicode, ce qui simplifie beaucoup les problèmes d'encodage. On a aussi une modification du calcul entre entiers: la division entre 2 entiers donne un flottant (ça donnait un entier avec Python 2). Etc... (voir la doc). En contrepartie, il y a une "rupture de compatibilité": les changements font que les programmes écrits en Python 2 nécessitent en général d'être modifiés pour être exécutés sous Python 3 (il y a un logiciel qui facilite cette conversion: 2to3.py).

    En résumé, on travaille maintenant en Python 3, sauf si on a une "bonne" raison (je ne parle pas des mauvaises... ) de rester en Python 2, par exemple: nécessité d'utiliser un module externe qui n'existe pas (encore) en Python 3, ou modification mineure d'un programme de grande taille écrit en Python 2.

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    En résumé, on travaille maintenant en Python 3, sauf si on a une "bonne" raison (je ne parle pas des mauvaises... ) de rester en Python 2, par exemple: nécessité d'utiliser un module externe qui n'existe pas (encore) en Python 3, ou modification mineure d'un programme de grande taille écrit en Python 2.
    Ce sont de bonnes raisons pour des développeurs.
    Dans l'enseignement, c'est une autre histoire: on travaille avec la version de Python que le professeur a demandé d'utiliser ou utilise. Cela lui évite d'avoir à mettre à jour ses cours/exos tous les 18 mois et çà ne change pas grand chose à ce qu'il va pouvoir enseigner surtout s'il utilise Python non pas pour enseigner l'informatique mais pour enseigner une matière qui a besoin d'outils pour calculer: physique, biologie, finance, dao,...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [WD17] Suite de Fibonacci (calcul du Nième terme)
    Par nuFox dans le forum WinDev
    Réponses: 11
    Dernier message: 17/07/2012, 09h56
  2. Réponses: 0
    Dernier message: 19/10/2011, 14h05
  3. [NASM] Problème suite de Fibonacci
    Par empochez dans le forum Assembleur
    Réponses: 1
    Dernier message: 05/04/2006, 11h17
  4. Suite de Fibonacci
    Par Évariste Galois dans le forum C++
    Réponses: 13
    Dernier message: 22/07/2005, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo