2009-10-09 4 views
0

Je suis en train de transférer du code Fortran de Fortran PowerStation (version 4.0) vers le compilateur Fortran 11 (2003). L'ancien compilateur (PowerStation) a une précision de 53 bits. Lors du portage vers le nouveau compilateur, je n'atteins pas les valeurs correctes ou exactes de mes variables réelles/flottantes. J'espère que le nouveau compilateur est une précision 64 bits. Je pense donc que je dois changer la FPU (unité à virgule flottante) de la précision de 53 bits à 64 bits. Est-ce correct? Si oui, comment puis-je changer la précision de 53 bits en 64 bits en utilisant les propriétés du nouveau compilateur? Si non, que devrais-je faire?Passage d'un FPU de 53 bits à 64 bits dans Fortran

Merci d'avance.

Répondre

1

Vous espérez que le nouveau compilateur est une précision 64 bits? Je m'attends en quelque sorte à ce que vous lisiez le manuel et le comprenne vous-même, mais si vous ne pouvez pas le faire, dites-nous quel compilateur vous utilisez et quelqu'un pourrait vous aider.

Quelle différence sont les résultats de l'ancien code et le code compilé avec le nouveau compilateur? Bien sûr, les résultats ne seront pas exactement les mêmes si la précision a changé - comment pourraient-ils être, à moins que vous ne preniez des mesures spéciales pour assurer la similitude?

2

Le moyen portable pour demander une précision à virgule flottante en Fortran 90/95/2003 est le selected_real_kind fonction intrinsèque. Par exemple, integer, parameter :: DoubleReal_K = selected_real_kind (14) définira un entier DoubleReal_K qui spécifie une variable à virgule flottante avec au moins 14 chiffres décimaux: real (DoubleReal_K) :: MyFloat. Demander 14 chiffres décimaux produira généralement un flotteur à double précision avec 53 bits - mais la seule garantie est de 14 chiffres décimaux. Si vous avez besoin de plus de précision, utilisez une valeur supérieure à 14 pour spécifier un type plus long - 17 chiffres décimaux peuvent obtenir une précision étendue (64 bits) ou une précision quadripolaire, ou rien, selon le compilateur. Si le compilateur a un plus grand type disponible, il le fournira ... Sinon, obtenez un meilleur compilateur. Pourquoi utilisez-vous un compilateur aussi ancien et non supporté? De plus, ne vous attendez pas à des résultats exacts de calculs à virgule flottante - il est normal que les changements provoquent de petits changements dans les résultats.

Questions connexes