OVH Cloud OVH Cloud

Pourquoi 10^16+1-10^16 = 0 ?

16 réponses
Avatar
ZarkXe
Bonjour à tous,

Je du mal a comprend pourquoi 10^16 + 1 - 10^16 = 0 ?

Merci d'avance.

ZarkXe

---------------%<-------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
double total3 = pow(10, 16) + 1 - pow(10, 16);
printf("pow(16) + 1 - pow(16) = %lf\n", total3);

return EXIT_SUCCESS;
}
---------------%<-------------

6 réponses

1 2
Avatar
Dominique MICOLLET
Antoine Leca a écrit :

On est hors sujet mais je continue un peu : il me paraît évident (depuis
de nombreuses années, donc avant de programmer en C) que les
applications de comptabilité ne doivent pas manipuler les montants en
utilisant directement les types flottants, parce que les chiffres
décimaux après la virgule n'ont pas de représentation unique.



Pour avoir enseigné un peu d'informatique de gestion, programmée
essentiellement en COBOL, je peux confirmer que l'unité est le centime et
non l'euro (ou plutôt le franc à l'époque).
D'ailleurs les calculatrices comptables avaient (ont ?) une touche "00"
permettant d'entrer un nombre "entier" 5,00 => "5" "00".
C'est bien de la virgule fixe, plus simple à mettre en oeuvre au niveau des
processeurs. C'est la procédure d'affichage qui se débrouille pour remettre
la virgule au bon endroit.

À propos de calcul de TVA, pour moi la TVA est toujours en centimes
(même si la manière d'arrondir peut être l'objet de discussions
«intéressantes» avec le fisc...) Par contre, la formule HT + TVA != TTC
peut apparaître quand tu dois recalculer le montant HT à partir du TTC:
il est des fois où cela ne tombe pas juste !



Le problème de la TVA et d'un certain nombre d'autres taxes est
effectivement lié aux arrondis, car les taux ne fournissent pas des portions
centimes : il faut ruser pour les récupérer ou les cacher. Et pour autant
que je sache, ils se calculent sur le montant TTC.

Je serais curieux de connaitre la règle d'arrondi du fisc. Wikipedia
mentionne un "arrondi bancaire" sans expliquer son intérêt.

Cordialement

Dominique.
Avatar
Dominique MICOLLET
Dominique MICOLLET a écrit :

Un truc illisible :
effectivement lié aux arrondis, car les taux ne fournissent pas des
portions centimes : il faut ruser pour les récupérer ou les cacher. Et



... car les taux fournissent des portions de centimes ....
Avatar
Olivier Miakinen
Le 17/10/2012 12:43, Dominique MICOLLET a écrit :

Wikipedia mentionne un "arrondi bancaire" sans expliquer son intérêt.



http://fr.wikipedia.org/wiki/Arrondi#M.C3.A9thode_d.27arrondissage_au_pair_le_plus_proche

À ce que je suppose, l'intérêt est d'arrondir une fois sur deux vers le
haut et une fois sur deux vers le bas, ce qui fait qu'en moyenne les
biais auront plus de chances de se compenser que de s'accumuler.

Je suppose aussi qu'il reviendrait au même d'arrondir toujours vers le
chiffre impair plutôt que toujours vers le chiffre pair.

Cordialement,
--
Olivier Miakinen
Avatar
Samuel DEVULDER
Le 17/10/2012 12:43, Dominique MICOLLET a écrit :


Je serais curieux de connaitre la règle d'arrondi du fisc. Wikipedia
mentionne un "arrondi bancaire" sans expliquer son intérêt.



Je crois que l'arrondi du banquier est arrondir à l'entier pair le plus
proche (round to even):

1.5 est arrondi à 2
2.5 est arrondi à 2
3.5 est arrondi à 4

-1.5 est arrondi à -2
-2.5 est arrondi à -2
-3.5 est arrondi à -4

L’intérêt est que cela limite les biais d'arrondis quand on enchaine les
opérations "arrondies" les unes aux autres. C'est le mode d'arrondi par
défaut dans IEEE754 d'après la wikipedia.

sam.
Avatar
Antoine Leca
Samuel DEVULDER écrivit :
Le 17/10/2012 12:43, Dominique MICOLLET a écrit :

Je serais curieux de connaitre la règle d'arrondi du fisc. Wikipedia
mentionne un "arrondi bancaire" sans expliquer son intérêt.



Je crois que l'arrondi du banquier est arrondir à l'entier pair le plus
proche (round to even):



... uniquement dans le cas de strict égalité de distance.

1.5 est arrondi à 2
2.5 est arrondi à 2
3.5 est arrondi à 4



1.51 arrondi à 2
2.51 arrondi à 3
2.50000000000000000000000000000000000000000000000000000001 arrondi à 3


L’intérêt est que cela limite les biais d'arrondis quand on enchaine les
opérations "arrondies" les unes aux autres.



Je ne crois que le souci soient les enchaînements, mais plutôt le biais
systématique pour la valeur .500000_0_ (et seulement elle), biais qui
est vers le haut¹ si on arrondi de manière habituelle (par défaut pour
la première décimale entre 0 et 4, par excès pour la première décimale
entre 5 et 9).


Antoine
__________
¹: en fait, le biais est vers l'infini, ou encore "away of zero".
Avatar
Samuel DEVULDER
Le 18/10/2012 19:28, Antoine Leca a écrit :
Samuel DEVULDER écrivit :
Je crois que l'arrondi du banquier est arrondir à l'entier pair le plus
proche (round to even):



... uniquement dans le cas de strict égalité de distance.



Oui j'avais oublié de le préciser. Sans cela on a un sacré biais: le
résultat est pair dans 100% des cas!

1.5 est arrondi à 2
2.5 est arrondi à 2
3.5 est arrondi à 4



1.51 arrondi à 2
2.51 arrondi à 3



Oui. Ce sont des arrondis au plus proche.

2.50000000000000000000000000000000000000000000000000000001 arrondi à 3



Dans l'esprit oui. Il est plus proche de 3 que de 2. Cependant ce nombre
n'est pas représentable en double ou float. Du coup son représentant le
plus proche: 2.5000000000000000 sera lui arrondi à 2.

L’intérêt est que cela limite les biais d'arrondis quand on enchaine les
opérations "arrondies" les unes aux autres.



Je ne crois que le souci soient les enchaînements, mais plutôt le biais
systématique pour la valeur .500000_0_ (et seulement elle), biais qui



en effet.

est vers le haut¹ si on arrondi de manière habituelle (par défaut pour
la première décimale entre 0 et 4, par excès pour la première décimale
entre 5 et 9).



Il a aussi d'autres propriétés. Comme il est symétrique par rapport à 0,
il commute avec la négation: arrondi(-x) = -arrondi(x). Je crois aussi
qu'il préserve la moyenne pour des distributions suffisamment éloignées
de 0: moyenne(arrondi(x1), arrondi(x2), ...) = moyenne(x1, x2, ...).
J'imagine que cela doit être lié à l'absence de biais qui ne s'accumule
pas dans la sommation nécessaire à la moyenne.

Merci pour toutes les précisions,

sam.
1 2