Comment utiliser et vérifier la précision du quad en gfortran?
Je suis en train d'utiliser quad précision dans gfortran, mais il semble que le real*16
ne fonctionne pas. Après un peu de pêche autour, j'ai trouvé qu'il peut être mis en œuvre comme real*10
. Est real*10
fait quad précision?
Comment puis-je tester la précision de mon code? Est-il un standard de l'algorithme simple pour les tests de précision? Par exemple, quand je veux comprendre ce que l'ordinateur zéro est, je continue à diviser par 2.0 jusqu'à ce que je atteindre 0.0. Garder la trace des valeurs qui me permet de savoir lorsque l'ordinateur pense que mon nombre différent de zéro est zéro en me donnant des nuls en informatique.
Est-il un bon moyen de déterminer la précision avec un type d'algorithme comme je l'ai décrit?
source d'informationauteur drjrm3
Vous devez vous connecter pour publier un commentaire.
Ajouter à l'existant réponses... réel*N est une extension de la langue et de mieux n'est pas utilisée. réel*10 n'est pas quad précision. Est est appelé "extended" -- c'est un 10 octets type fournis par des processeurs Intel. réel*16 peuvent ou peuvent ne pas être disponibles sur gfortran, selon le compilateur de la version, le matériel et la disponibilité de libquadmath. Si fournie dans le logiciel, il sera lente.
Le Fortran façon de demander de la précision que vous voulez est d'utiliser le selected_real_kind fonction de définir une sorte de valeur pour la précision que vous souhaitez.
Obtenir un quad nombre réel, si elle est disponible. Sinon, avec Fortran 2008 ou plus tard, vous pouvez "utiliser ISO_FORTRAN_ENV" et ensuite avoir accès à ce genre de valeur REAL128. Le genre de valeurs de -1 si la précision n'est pas disponible.
Une question connexe: Qu'est-ce que real*8"?
Utiliser les types modernes code Fortran, c'est à dire
Vous pouvez ensuite utiliser
selected_real_kind()
ouiso_fortran_env
module ouc_long_double
type de la valeur deiso_c_binding
module pour obtenir le type de la variable. Toutes ces activités ont un sens différent.Vous pouvez utiliser
epsilon()
tiny()
huge()
ounearest()
intrinsèques d'évaluer la réelle précision de votre code.Quad précision dans gfortran nécessite généralement
libquadmath
bibliothèque qui devrait être disponible pour la plupart des plates-formes, mais peut-être pas par défaut.Le gfortran documentation pour type de paramètres de type réponses à cette question, en particulier la dernière phrase, qui se lit comme suit:
Ce que vous avez découvert, c'est que
real*16
n'est pas mis en place sur votre plate-forme.real(kind=10) est le soi-disant étendu 80 bits de précision Wikipédia 80 bits.
real(kind=16) est le quadruple de 128 bits precition Wikipédia 128 bits.
Comme déjà mentionné précédemment, vous pouvez employer selected_real_kind(), epsilon(), minuscule(), énorme() pour sélectionner et vérifier la précision pour être utilisé.
Essayer le gfortran commande
sur le fichier de test
Sur ma plate-forme (FEDORA 20), il fonctionne.