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
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
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)
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 ...
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!!!
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
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
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)
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 :
renvoie
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)
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
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é.
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part real*16
il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
Libere-toi hacker, GNU's Not Unix!!!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager