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
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
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
Partager