OVH Cloud OVH Cloud

calcul tronqué

33 réponses
Avatar
jobill
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique avec 1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.

10 réponses

1 2 3 4
Avatar
GL
Le 09/04/2015 09:52, jobill a écrit :
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.




A priori, Excel travaille avec des réels doubles
(64 bits / 4 octets / IEEE754) dont la répartition
sur la droite réelle n'est pas uniforme. On les appelle
"double" car ils prennent 4 octets, et historiquement,
sur les machines 32 bits, les entiers sont codés sur
32 bits (2 octets).

Plus vous vous allez vers les grandes valeurs, plus
il y a de trous. Le nombre 6186171974825304 n'a ainsi
pas d'autre représentation que 6186171974825300.

Il avoir un calcul exact, on peut écrire des fonctions
qui font les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres, la précision
est alors infinie. Sans doute cela a déjà été fait.

Florent.
Avatar
GL
Le 09/04/2015 11:51, GL a écrit :
Le 09/04/2015 09:52, jobill a écrit :
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est
identique avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.




A priori, Excel travaille avec des réels doubles
(64 bits / 4 octets / IEEE754) dont la répartition



heu... 64 bits = 8 octets, 32 bits = 4 octets.
J'ai fait un décalage.

sur la droite réelle n'est pas uniforme. On les appelle
"double" car ils prennent 4 octets, et historiquement,
sur les machines 32 bits, les entiers sont codés sur
32 bits (2 octets).

Plus vous vous allez vers les grandes valeurs, plus
il y a de trous. Le nombre 6186171974825304 n'a ainsi
pas d'autre représentation que 6186171974825300.

Il avoir un calcul exact, on peut écrire des fonctions
qui font les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres, la précision
est alors infinie. Sans doute cela a déjà été fait.

Florent.
Avatar
MichD
Bonjour,

Voir le commentaire de Microsoft sur le sujet :

https://support.microsoft.com/en-us/kb/269370/
Avatar
jobill
Le jeudi 09 Avril 2015 à 11:51 par GL :
Le 09/04/2015 09:52, jobill a écrit :
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est
de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est
identique avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.





A priori, Excel travaille avec des réels doubles
(64 bits / 4 octets / IEEE754) dont la répartition
sur la droite réelle n'est pas uniforme. On les appelle
"double" car ils prennent 4 octets, et historiquement,
sur les machines 32 bits, les entiers sont codés sur
32 bits (2 octets).

Plus vous vous allez vers les grandes valeurs, plus
il y a de trous. Le nombre 6186171974825304 n'a ainsi
pas d'autre représentation que 6186171974825300.

Il avoir un calcul exact, on peut écrire des fonctions
qui font les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres, la précision
est alors infinie. Sans doute cela a déjà été fait.

Florent.


Merci pour cette réponse.
Vous dites :
Il avoir un calcul exact, on peut écrire des fonctions
qui font les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres, la précision
est alors infinie. Sans doute cela a déjà été fait.

Ma question devient alors
Comment écrire les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres?
Ceci afin de faire ( avec excel 2010 ?) le calcul exact de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1) ?

Merci d'avance.
Avatar
Jacquouille
Bonjour
Perso, avec XL2003, voici ce à quoi j'arrive:
6 186 171 974 825 300,00

Je me demande comment tu arrives à avoir un 4 pour finir, car tant dans le
dividende que dans le diviseur, il y a un multiple de 10, donc cela doit
finir par 0. non ?
a savoir: diviser ceci 38 521 421 559 614 200 000 000 000,00
par cela : 6 227 020 800,00

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"jobill" a écrit dans le message de groupe de discussion :


Le jeudi 09 Avril 2015 à 11:51 par GL :
Le 09/04/2015 09:52, jobill a écrit :
Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est
de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est
identique avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.





A priori, Excel travaille avec des réels doubles
(64 bits / 4 octets / IEEE754) dont la répartition
sur la droite réelle n'est pas uniforme. On les appelle
"double" car ils prennent 4 octets, et historiquement,
sur les machines 32 bits, les entiers sont codés sur
32 bits (2 octets).

Plus vous vous allez vers les grandes valeurs, plus
il y a de trous. Le nombre 6186171974825304 n'a ainsi
pas d'autre représentation que 6186171974825300.

Il avoir un calcul exact, on peut écrire des fonctions
qui font les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres, la précision
est alors infinie. Sans doute cela a déjà été fait.

Florent.


Merci pour cette réponse.
Vous dites :
Il avoir un calcul exact, on peut écrire des fonctions
qui font les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres, la précision
est alors infinie. Sans doute cela a déjà été fait.

Ma question devient alors
Comment écrire les calculs (avec des entiers) sur des chaînes
de caractère plutôt que sur des nombres?
Ceci afin de faire ( avec excel 2010 ?) le calcul exact de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1) ?

Merci d'avance.


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
Péhemme
Bonjour jobill,

Je ne sais pas où tu en es dans tes travaux.
Dans le temps, je me suis amusé avec PMO, membre éminent du MPFE, à
construire une machine à travailler sur les Très Grands Nombres.
Elle ne m'a naturellement jamais servi à rien.
J'ai, dans mon grenier, retrouvé cette machine.
Je m'en suis inspiré pour te proposer ce petit userform qui devrait répondre
à ton besoin.
Naturellement, comme te l'on dit les autres contributeurs, le résultat
obtenu est en texte.
Tu trouveras le fichier sur :
http://cjoint.com/?0DunnXHcuhF

Bon courage
Michel


"jobill" a écrit dans le message de groupe de discussion :


Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique
avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.
Avatar
Péhemme
Arhh !
J'aurais du retirer les msgbox.
La macro de mise en forme est un peu "bourrin".
Si un contributeur a une idée, je suis preneur.
Merci d'avance
Michel


"jobill" a écrit dans le message de groupe de discussion :


Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique
avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.
Avatar
Jacquouille
Salut Michel,

C'est marrant, mais mon PC me dit que ton doc a été fait avec une version
plus récente que la mienne (enfin, celle du PC. Moi, je suis de 48 et mon
Excel de 2003).
Or, tu as été dans ton grenier .... c'était quand?

Ce serait un comble....
-))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
mh2mdp$nnj$

Bonjour jobill,

Je ne sais pas où tu en es dans tes travaux.
Dans le temps, je me suis amusé avec PMO, membre éminent du MPFE, à
construire une machine à travailler sur les Très Grands Nombres.
Elle ne m'a naturellement jamais servi à rien.
J'ai, dans mon grenier, retrouvé cette machine.
Je m'en suis inspiré pour te proposer ce petit userform qui devrait répondre
à ton besoin.
Naturellement, comme te l'on dit les autres contributeurs, le résultat
obtenu est en texte.
Tu trouveras le fichier sur :
http://cjoint.com/?0DunnXHcuhF

Bon courage
Michel


"jobill" a écrit dans le message de groupe de discussion :


Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique
avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
Péhemme
Salut Jacques,

:-)))
C'était il y a mille ans...
Je me suis inspiré de ce que j'avais fait il y a donc mille ans et je l'ai
adapté pour les jeunes d'aujourd'hui...
Spécialement pour toi, tu trouveras le fichier en xls à l'adresse suivante :
http://cjoint.com/?EDuoQwjx9FB
Amuse-toi bien
et bises à toutes les belges.
Bien amicalement
Michel




"Jacquouille" a écrit dans le message de groupe de discussion :
mh2p1u$vo3$

Salut Michel,

C'est marrant, mais mon PC me dit que ton doc a été fait avec une version
plus récente que la mienne (enfin, celle du PC. Moi, je suis de 48 et mon
Excel de 2003).
Or, tu as été dans ton grenier .... c'était quand?

Ce serait un comble....
-))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
mh2mdp$nnj$

Bonjour jobill,

Je ne sais pas où tu en es dans tes travaux.
Dans le temps, je me suis amusé avec PMO, membre éminent du MPFE, à
construire une machine à travailler sur les Très Grands Nombres.
Elle ne m'a naturellement jamais servi à rien.
J'ai, dans mon grenier, retrouvé cette machine.
Je m'en suis inspiré pour te proposer ce petit userform qui devrait répondre
à ton besoin.
Naturellement, comme te l'on dit les autres contributeurs, le résultat
obtenu est en texte.
Tu trouveras le fichier sur :
http://cjoint.com/?0DunnXHcuhF

Bon courage
Michel


"jobill" a écrit dans le message de groupe de discussion :


Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique
avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com
Avatar
Péhemme
re-Arhh !
Sous les "terme diviseur" il faut lire "Diviseur" et non pas "Dividende"...
Le lecteur aura rectifié de lui-même.
Cela ne change pas le résultat.
;-)
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
mh2p1u$vo3$

Salut Michel,

C'est marrant, mais mon PC me dit que ton doc a été fait avec une version
plus récente que la mienne (enfin, celle du PC. Moi, je suis de 48 et mon
Excel de 2003).
Or, tu as été dans ton grenier .... c'était quand?

Ce serait un comble....
-))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
mh2mdp$nnj$

Bonjour jobill,

Je ne sais pas où tu en es dans tes travaux.
Dans le temps, je me suis amusé avec PMO, membre éminent du MPFE, à
construire une machine à travailler sur les Très Grands Nombres.
Elle ne m'a naturellement jamais servi à rien.
J'ai, dans mon grenier, retrouvé cette machine.
Je m'en suis inspiré pour te proposer ce petit userform qui devrait répondre
à ton besoin.
Naturellement, comme te l'on dit les autres contributeurs, le résultat
obtenu est en texte.
Tu trouveras le fichier sur :
http://cjoint.com/?0DunnXHcuhF

Bon courage
Michel


"jobill" a écrit dans le message de groupe de discussion :


Bonjour,
Avec excel 2010 j'obtiens, pour le calcul de
=(99*98*97*96*95*94*93*92*91*90*89*88*87)/(13*12*11*10*9*8*7*6*5*4*3*2*1)
le résultat faux suivant : 6186171974825300
au lieu du résultat juste 6186171974825304. La différence est de 4.
Le format de la cellule est nombre avec 0 décimale, le calcul est identique
avec
1 ou plusieurs décimales.
Comment faire pour obtenir un calcul juste?
Cordialement.


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com
1 2 3 4