Plus Précise des Types de Données à virgule Flottante de double?
Dans mon projet, je dois calculer la division, la multiplication, la soustraction, l'addition sur une matrice de double
éléments.
Le problème est que lorsque la taille de la matrice augmente la précision de mon résultat est radicalement être touché.
Actuellement, je suis en utilisant double
pour chaque élément qui, je crois, utilise 8 bytes
de mémoire & a la précision de 16 digits
indépendamment de la position du point décimal.
Même pour les grandes taille de la matrice de la mémoire occupée par l'ensemble des éléments est de l'ordre de quelques kilo-octets. Si je peux me permettre d'utiliser datatypes
qui nécessitent plus de mémoire.
Donc je voulais savoir quel type de données est plus précis que double
.
J'ai essayé de chercher dans des livres & j'ai pu trouver long double
.
Mais je ne sais pas quelle est sa précision.
Et si je veux plus de précision que ça?
Dans le cas, vous pouvez compter sur les dépendances externes, Boost 1.53 a un Multiprecision bibliothèque qui vous aide à vous!!
À l'aide d'un peu d'algèbre pour réorganiser les calculs mathématiques peuvent aider à réduire les erreurs d'arrondi
Le passage à une plus grande type retarde simplement le numérique s'effondrer. Pour l'éviter complètement, des fissures sur une analyse numérique du livre et de lire le chapitre sur la "stabilité".
Numérique de l'effondrement est le phénomène que vous êtes en train de vivre: des erreurs d'Arrondi s'accumuler et entraîner une mauvaise réponse.
OriginalL'auteur Cool_Coder | 2013-03-27
Vous devez vous connecter pour publier un commentaire.
Selon Wikipedia, 80 bits "Intel" IEEE 754 étendue de précision
long double
, qui est de 80 bits collier de 16 octets en mémoire, a 64 bits de mantisse, sans implicite bits, ce qui vous permet de vous 19.26 chiffres après la virgule. Cela a été presque universellement standard pourlong double
pour les âges, mais récemment, les choses ont commencé à changer.La plus récente de 128 bits quad-précision format dispose de 112 bits de la mantisse plus implicite bits, ce qui vous obtient 34 chiffres après la virgule. GCC met en œuvre ce que l'
__float128
type et il est (si ma mémoire est bonne) d'une option de compilation pour définirlong double
.Je ne connais pas les caractéristiques de votre programme, mais depuis c'est facile, il suffit d'essayer les deux!
ok je vais & que vous le sachiez. Juste pour l'amour d'elle, laissez-moi savoir si ce qui suit est incorrect: __float128 *nicePrecision = new __float128();
128-bits flotteurs ne sont pas tous cette nouvelle. Ils sont la
long double
type sur SPARC, qui a été autour depuis des siècles (comme dans un peu plus de vingt ans).C'est encore beaucoup plus récente que la 8087! Et la normalisation n'est apparue qu'en 2008, si je ne me trompe. De toute façon j'ai l'impression qu'ils sont en train de s'imposer maintenant, parce que l'héritage de 80 bits matériel est pour la plupart disparu.
OriginalL'auteur Potatoswatter
Virgule flottante types de données avec plus de précision que
double
sont va dépendre de votre compilateur et de l'architecture.Afin d'obtenir plus de
double
de précision, vous pouvez avoir besoin de s'appuyer sur certains de mathématiques de la bibliothèque qui prend en charge les calculs de précision arbitraire. Ces ne sera probablement pas rapide.Vous semblent ignorer l'existence de
long double
. Les mêmes questions ne sorte de l'appliquer, mais dans une bien moindre mesure.Je viens de dire ne sera probablement pas rapide, pas assez rapide. Donc oui, ça dépend beaucoup de ce que l'OP est en train de faire. Je vous suggère une bibliothèque de mathématiques si je le savais, mais mon expérience avec une précision arbitraire comme c'est limité à d'autres langues.
merci pour l'info sur la vitesse.
OriginalL'auteur Telgin
Vous pourriez envisager de la séquence des opérations, c'est à dire faire des ajouts dans une séquence ordonnée commençant par la plus petite des valeurs premières. Cela permettra d'accroître la précision globale des résultats en utilisant la même précision dans la mantisse:
Le point est que l'ajout d'un petit nombre à un grand nombre va les faire disparaître. Si cette dernière approche permet de réduire l'erreur numérique
OriginalL'auteur ogni42
Sur des architectures Intel la précision de
long double
est 80bits.Ce type de valeurs voulez-vous représenter? Peut-être que vous êtes mieux à l'aide de précision fixe.
long float
? Vraiment? 80 bits de précision et combien d'aller dans l'exposant?Dépend du compilateur; avec MS, un
long double
a la même précision qu'undouble
.Je voulais dire long double, c'était juste un petit problème.
OriginalL'auteur fons