2017-09-04 3 views
0

Je souhaite déclarer une variable à virgule flottante qui peut stocker des chiffres plus significatifs que les doubles les plus communs et long double, de préférence quelque chose comme un octuple (256 bits), que (je crois) pourrait donner environ 70 chiffres significatifs.Déclarant une variable à virgule flottante précision octuple en C++

Comment déclarer une telle variable? Et la compatibilité multi-plateforme sera-t-elle un problème (par opposition aux entiers à largeur fixe)?

Toute aide est très appréciée.

+3

Oui, ce sera un problème car aucun type de données de ce type n'est spécifié dans la norme C++. Il y a des bibliothèques "bignum" que vous pouvez trouver si vous recherchez un peu, et qui peuvent le manipuler de façon portable (au moins pour la source, et si la sérialisation en texte). –

+0

Il est extrêmement peu probable que votre compilateur offre une précision octuple. Il peut offrir précision quad avec une syntaxe pratique et quelques-unes des fonctionnalités manquantes (émulé dans le logiciel, https://stackoverflow.com/questions/5451447/quadruple-precision-in-c-gcc), mais il est également possible que ce n'est pas le cas. Si vous êtes prêt à utiliser une bibliothèque externe, MPFR est un bon choix: http://www.mpfr.org –

+0

Il convient de reconsidérer si vous avez réellement besoin que beaucoup de précision: Pratiquement toutes les tâches de calcul peut être fait avec * largement * moins de précision . Certaines tâches où vous rencontrez des problèmes de stabilité arithmétique de très petits nombres peuvent être mieux résolues en travaillant dans l'espace du journal. Et enfin, il serait peut-être préférable de faire évoluer votre calcul pour qu'il fonctionne à la place sur des entiers. –

Répondre

5

La norme C++ exige une précision allant jusqu'à double inclusivement; et les détails plus fins de ce schéma à virgule flottante sont laissés à l'implémentation.

Une précision quadruple de la norme IEEE754 long double ne vous donnera que 36 chiffres significatifs. Je n'ai jamais rencontré un système, au moment de l'écriture, qui implémente la précision octuple.

Votre meilleur pari est d'utiliser quelque chose comme le GNU Multiple Precision Arithmetic Library, ou, si vous voulez vraiment binaire virgule flottante, The GNU Multiple Precision Floating Point Reliable Library.

+2

GMP fournit des entiers et des rationnels. MPFR est une version multi-précision plus directe des types à virgule flottante. –