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

Fortran Discussion :

[Fortran 77] Ordre de grandeur des nombres en double précision


Sujet :

Fortran

  1. #1
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut [Fortran 77] Ordre de grandeur des nombres en double précision
    Bonjour,
    Jusqu'à quel ordre de nombre le Fortran peut lire en double précision ?
    Par exemple, est-ce que le nombre $1*10^(-100)$ peut être accepté ?
    Merci

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Ce n'est pas une question de Fortran, mais de caractéristiques du processeur, qui sont généralement régies par la norme IEEE 754. Tu trouveras toutes les informations à ce sujet sous ce nom dans Wikipedia.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    En plus du processeur, tu dois utiliser la solution des kinds de Fortran 90. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    integer, parameter :: Real100 = selected_real_kind(r=100)
    ...
    real (kind=Real100) x,y,z
    ...
    x = 1e-100_Real100
    ...

  4. #4
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    habituellement, sur un pc 32 bits, les double precision sont codés sur 8octets (64bits) (NB: un réél est codé par son signe, sa mantisse et son exposant) donc t'inquiète, tu peux largement monter dans les exposant, en tout cas, j'ai déjà vu passer des nombres à trois chiffres dans l'exposant sans problèmes...

    le truc c'est qu'après tu fleurte avec l'erreur machine et donc tu peux avoir des surprises... (surtout pour les petits nombres)

    il se compose génralement:
    1bits de signe, 52bits de mantisse enfin 11 pour l'exposant.

    dans l'exposant, il y a: 1bit de signe, et 10 pour le nombre soit:
    de -1023 à 1024

    Remarque, pour les real*4, il y a
    1 bit pour le signe, 23 bits pour la mantisse et 8 bits pour l'exposant
    soit pour l'exposant: de -127 à 128

    donc même avec un real*4 tu peut avoir un 10^100
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par genteur slayer Voir le message
    ...
    Remarque, pour les real*4, il y a 1 bit pour le signe, 23 bits pour la mantisse et 8 bits pour l'exposant soit pour l'exposant: de -127 à 128

    donc même avec un real*4 tu peut avoir un 10^100
    Non. La plage d'exposant -127:128 doit être appliquée à une base de 2. Et 2^128 donne environ 3.4 x 10 ^ 38. En fait, la plage en base 10 des reals 4 est d'environ 1.175E-38 à 3.402E38. On est donc loin de 10^100...

    Pour les real (8), la plage en base 10 est d'environ 2.225e-308 à 1.797e308

  6. #6
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Merci pour vos réponses c est un peu plus claire maintenant,
    mais si dans le coeur d une subroutine les nombres commencent a dépasser l ordre 10^-351, alors tout va etre detruit meme si la reponses finale de la subroutine n est pas de l ordre 10^-351, alors il n y aura pas de solutions dans ce cas?
    merci

  7. #7
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Il ne suffit pas que le résultat final soit dans le domaine des nombres tolérés par ton processeur; il faut aussi que cette condition soit vérifiée pour tous les résultats intermédiaires. C'est à toi de faire le nécessaire lors de la formulation de ton problème et de la conception de ton programme.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  8. #8
    Membre habitué Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut!
    Il ne suffit pas que le résultat final soit dans le domaine des nombres tolérés par ton processeur; il faut aussi que cette condition soit vérifiée pour tous les résultats intermédiaires. C'est à toi de faire le nécessaire lors de la formulation de ton problème et de la conception de ton programme.
    Jean-Marc Blanc
    Tout à fait. Pour tester les valeurs en cours de programme, j'utilise la fonction huge
    qui renvoie la valeur maximale dans le type concerné. Elle fait partie du standard Fortran95.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    print *, "Le plus grand entier ", huge (0)
    print *, "Le plus grand réel ", huge (0.0)
    print *, "Le plus grand réel en double précision ",huge (0.0d0)
    renvoie

    Le plus grand entier 2147483647
    Le plus grand réel 3.4028235E+38
    Le plus grand réel en double précision 1.797693134862316E+308

  9. #9
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    quand meme, j utilise le f77...

  10. #10
    Membre habitué Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par feynman Voir le message
    quand meme, j utilise le f77...
    Certes. Je ne voudrais surtout pas apparaître polémique, indiscret ou désobligeant,
    mais je ne comprend pas pourquoi tu ne passes pas au Fortran 90( ou +).
    Ce standard offre de nombreuses possibilités qui m'ont manqué pendant les
    années où j'utilisais le FORTRAN77 : types dérivés, allocation dynamique, fonctions récursives, .

    De plus, -- (j'utilise Linux openSUSE au labo et zenwalk chez moi) il est (va être) de
    plus en plus difficile de trouver des compilateurs pour le FORTRAN77.

    Pour l'avoir abondamant testée, l'option --ff2c est loin de résoudre tous les problèmes
    de compatibilité.

  11. #11
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    sinon il faut, à l'intérieur de ta subroutine utiliser des reels plus grand que ça...
    je sais qu'en C il y a les "extended" donc il doit bien y avoir un moyen de les utiliser en fortran genre

    peut-être...
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

Discussions similaires

  1. [Batch] Trier des nombres ordre croissant dans fichier texte
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 20
    Dernier message: 01/11/2009, 10h22
  2. algo qui affiche par ordre croissant des nombres
    Par jeremdu69300 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 18/09/2008, 23h16
  3. Réponses: 1
    Dernier message: 17/05/2008, 22h44
  4. envoyer des nombres en ordre
    Par Micheal1221 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 07/08/2006, 03h37
  5. [Fortran] Format décimal des nombres
    Par bert24 dans le forum Fortran
    Réponses: 4
    Dernier message: 12/05/2005, 17h55

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