Bonjour,
J'aimerais savoir comment on peut utiliser la variable suivante pour éviter des erreurs d'arrondi :
Merci d'avance.Code:
1
2 const Icoor1 MaxICoor = 8388608;
Version imprimable
Bonjour,
J'aimerais savoir comment on peut utiliser la variable suivante pour éviter des erreurs d'arrondi :
Merci d'avance.Code:
1
2 const Icoor1 MaxICoor = 8388608;
Bonsoir,
on pourrait avoir une question plus claire ?
On a une variable d'un type inconnu, "représentée" par un entier tout ce qu'il y a de plus parfait comme valeur entière.
Donc bon... en absence de boule de crystal (vacances bien méritées la pauvre)
Pardon Icoor=double.
N'avoir aucune erreur d'arrondi sur des opérations en virgule flottante? Tu en demandes beaucoup! Par nature des nombres à virgule flottante, il y aura des erreurs d'arrondi dans de très nombreux cas.
Pour ce qui est de les minimiser, la réponse dépend des opérations exactes...
Cette valeur tient entièrement dans la mantisse d'un flottant "double précision", elle n'a donc pas en soi d'erreurs d'arrondi...
Merci pour ces remarques. Je m'excuse le code source que j'analyse en ce moment est assez compliqué.
Je récapitule toutes les informations que j'ai:
et j'ai joins le document (c'est le code de la fin).Code:
1
2
3
4
5
6
7
8 const int MaxICoor = 8388608 ; //max de coordonnées entières 2^23 pour //ne pas avoir derreur darrondi const Icoor2 MaxICoor22 //plus gros produit de coordonnées MaxICoor22 = Icoor2(2)*Icoor2(MaxICoor) * Icoor2(MaxICoor) ; //plus loin on a coefIcoor = (MaxICoor)/(Max(pmax.x-pmin.x, pmax.y-pmin.y));
MaxIcoor22 est égal à 2^23 * 2^23 * 2, c'est-à-dire 2^47.
Même si ce n'était pas une puissance de 2 pure (et c'en est une), ça tiendrait quand même dans 53 bits de mantisse.
Par contre, coefIcor peut avoir une erreur d'arrondi.