web-dev-qa-db-fra.com

Que signifie "vrai * 8"?

Le manuel d'un programme écrit en Fortran 90 dit: "Toutes les variables et paramètres réels sont spécifiés avec une précision de 64 bits (c'est-à-dire real*8). "

Selon Wikipedia , la simple précision correspond à une précision de 32 bits, tandis que la double précision correspond à une précision de 64 bits, donc apparemment le programme utilise la double précision.

Mais qu'est-ce que real*8 signifier?

Je pensais que le 8 signifie que 8 chiffres suivent la virgule décimale. Cependant, Wikipedia semble dire que la précision simple fournit généralement 6 à 9 chiffres tandis que double précision fournit généralement 15 à 17 chiffres. Cela signifie-t-il que l'instruction "précision 64 bits" n'est pas cohérente avec real*8?

28
Andrew

Le 8 fait référence au nombre octets que le type de données utilise.

Un entier 32 bits est donc integer*4 sûr les mêmes lignes.

Une recherche rapide a trouvé ce guide des types de données Fortran , qui comprend:

L'instruction "real * 4" spécifie que les noms des variables doivent être des nombres réels à 4 octets simple précision qui ont 7 chiffres de précision et une plage de magnitude de 10 de -38 à +38. L'instruction "real" est la même que l'instruction "real * 4" sur presque tous les ordinateurs 32 bits.

et

L'instruction "real * 8" spécifie que les noms de variables doivent être des nombres réels à 8 octets double précision qui ont 15 chiffres de précision et une plage de magnitude de 10 de -308 à +308. L'instruction "double précision" est la même que l'instruction "real * 8" sur presque tous les ordinateurs 32 bits.

33
Jon Skeet

Il existe maintenant au moins 4 façons de spécifier la précision dans Fortran.

Comme déjà répondu, real*8 spécifie le nombre d'octets. Il est quelque peu obsolète mais devrait être sûr.

La nouvelle façon est avec les "types". Il faut utiliser les fonctions intrinsèques pour obtenir le type qui a la précision dont vous avez besoin. La spécification du type par une valeur numérique spécifique est risquée car différents compilateurs utilisent des valeurs différentes.

Encore une autre façon consiste à utiliser les types nommés de ISO_C_Binding. Cette question traite du système de type pour les entiers - il est très similaire pour les réels.

24
M. S. B.

La notation en étoile (comme TYPE*n est appelé) est une construction Fortran non standard si elle est utilisée avec TYPE autre que CHARACTER.

S'il est appliqué au type de caractère, il crée un tableau de n caractères (ou une chaîne de n caractères).

S'il est appliqué à un autre type, il spécifie la taille de stockage en octets. Cela devrait être évité à tout prix dans Fortran 90+, où le concept de type KIND est introduit. La spécification de la taille de stockage crée des applications non portables.

14
Hristo Iliev