Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vérification d'un petit calcul

17 réponses
Avatar
Tatanka
Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge

10 réponses

1 2
Avatar
Jacquouille
Bonjour:
Il me donne également 2000 avec 2003.
Mais, quelle est l'utilité de la boucle?
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."


"Tatanka" a écrit dans le message de groupe de discussion :
isniei$el6$

Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge
Avatar
Tatanka
Mais, quelle est l'utilité de la boucle?


Un simple exemple de calcul itératif qui
mène à un résultat absurde. J'obtiens aussi 2000 sous Excel 2010
alors que le bon résultat est 1,999998093.
Grosse erreur, n'est-il pas ?

Serge




"Jacquouille" a écrit dans le message de news: 4def53d4$0$14257$
Bonjour:
Il me donne également 2000 avec 2003.
Mais, quelle est l'utilité de la boucle?
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."


"Tatanka" a écrit dans le message de groupe de discussion : isniei$el6$

Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge

Avatar
Jacquouille
NON !
tout dépend de l'unité prise en compte et de ton but.
Si 1,9 représente des Km et que tu travailles en Suisse dans l'horlogerie
......
Tout est relatif et dépend du point de vue selon lequel on se place.
Bonne journée -)

Jacquouille

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

Mais, quelle est l'utilité de la boucle?


Un simple exemple de calcul itératif qui
mène à un résultat absurde. J'obtiens aussi 2000 sous Excel 2010
alors que le bon résultat est 1,999998093.
Grosse erreur, n'est-il pas ?

Serge




"Jacquouille" a écrit dans le message de news:
4def53d4$0$14257$
Bonjour:
Il me donne également 2000 avec 2003.
Mais, quelle est l'utilité de la boucle?
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."


"Tatanka" a écrit dans le message de groupe de discussion :
isniei$el6$

Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge

Avatar
Maude Este
Bonsour®

ramanujan a écrit
Un simple exemple de calcul itératif qui
mène à un résultat absurde. J'obtiens aussi 2000 sous Excel 2010
alors que le bon résultat est 1,999998093.
Grosse erreur, n'est-il pas ?



l'erreur découle à mon humble avis de l'approximation de u(1)
5/3 === >1,66666666666667
l'erreur est déjà présente dès u(2) : 1,8

;o)))
0 1,5 1,500000000000000
1 1,666666667 1,666666666666670
2 1,8 1,800000000000090
3 1,888888889 1,888888888987620
4 1,941176575 1,941176575124880
5 1,969804673 1,969804672578990
6 2,093968438 2,093968438091500
7 106,4376005 106,437600479036000
8 1964,557274 1964,557273801580000
9 1999,963988 1999,963988082640000
10 1999,999964 1999,999964022550000
11 2000 1999,999999964040000
12 2000 1999,999999999960000
13 2000 2000,000000000000000
14 2000 2000,000000000000000
15 2000 2000,000000000000000
16 2000 2000,000000000000000
17 2000 2000,000000000000000
18 2000 2000,000000000000000
19 2000 2000,000000000000000
20 2000 2000,000000000000000
Avatar
michel ou sam
Bonjour,
en faisant la même chose dans une feuille excel, on obtient également 2000
dès que n
Il y a peut être une erreur d'écriture de la formule

0 1,5
1 1,66666667
2 3601,2 1600 1,8
3 3334,444444 1333,333333 1,88888889
4 3177,529411 1176,470588 1,94117668
5 3091,939053 1090,908971 1,9699175
6 3046,828104 1046,036615 2,20851118
7 2717,667931 919,4166233 204,748693
8 29,31398449 8,845843518 1982,53186
9 3,027441891 0,009854139 1999,98241
10 3,001026391 0,00100882 1999,99998
11 3,001000026 0,001000009 2000
12 3,001 0,001 2000
13 3,001 0,001 2000
14 3,001 0,001 2000
15 3,001 0,001 2000
16 3,001 0,001 2000
17 3,001 0,001 2000
18 3,001 0,001 2000
19 3,001 0,001 2000
20 3,001 0,001 2000


Michel

"Tatanka" a écrit dans le message de news:
isnkvj$l1f$
Mais, quelle est l'utilité de la boucle?


Un simple exemple de calcul itératif qui
mène à un résultat absurde. J'obtiens aussi 2000 sous Excel 2010
alors que le bon résultat est 1,999998093.
Grosse erreur, n'est-il pas ?

Serge




"Jacquouille" a écrit dans le message de news:
4def53d4$0$14257$
Bonjour:
Il me donne également 2000 avec 2003.
Mais, quelle est l'utilité de la boucle?
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."


"Tatanka" a écrit dans le message de groupe de discussion :
isniei$el6$

Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge





Avatar
bcar
Bonjour

Tout simplement parce que tu utilise des double
Je t'invite à découvrir la représentation numérique d'un nombre à
virgule flottante
http://fr.wikipedia.org/wiki/Virgule_flottante

Pour faire simple dans ton exemple, tu utilise 5/3
or 5/3 = 1.6666666666666666....
or ton type double va le stocker 1.66666666666667
donc tes calculs vont dévier très légèrement au fur et à mesure.
C'est donc ton algorithme qui ne convient pas.

Pour diminuer l'erreur ou la retarder tu pourrais déjà utiliser le type
Decimal (avec le type variant et la fonction CDec)

Je n'ai pas fais le calcul excat mais qu'est-ce qui te fais croire que
u(19) = 1,999998093.
j'ai plutôt l'impression (intuitivement et en calculant les premiers
termes) que ta suite va effectivement converger vers 2000.

bcar

Le 08/06/2011 13:04, Tatanka a écrit :
Mais, quelle est l'utilité de la boucle?


Un simple exemple de calcul itératif qui
mène à un résultat absurde. J'obtiens aussi 2000 sous Excel 2010
alors que le bon résultat est 1,999998093.
Grosse erreur, n'est-il pas ?

Serge

"Jacquouille" a écrit dans le message de news: 4def53d4$0$14257$
Bonjour:
Il me donne également 2000 avec 2003.
Mais, quelle est l'utilité de la boucle?
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."


"Tatanka" a écrit dans le message de groupe de discussion : isniei$el6$

Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge





Avatar
MichD
Bonjour,

u(n) égale déjà 2000 quand N = 13

MichD
--------------------------------------------


"Tatanka" a écrit dans le message de groupe de discussion : isniei$el6$

Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge
Avatar
Tatanka
Calcul exact :
u(0) = 3/2 = n(0)/d(0)
u(1) = 5/3 = n(1)/d(1)

u(2) = 2003 - 6002/(5/3) + 4000/(( 5/3)*(3/2)) = 9/5 = n(2)/d(2)
u(3) = 2003 - 6002/(9/5) + 4000/(( 9/5)*(5/3)) = 17/9 = n(3)/d(3)

u(4) = 2003 - 6002/(17/9) + 4000/(( 17/9)*(9/5)) = 33/17 = n(4) /d(4)

...

J'en déduis que :
le numérateur n(i) = n(i-1) + 2^i

le dénominateur d(i) = n(i-1).

Ce qui me conduit à cette macro :

Sub Pas_Erreurs()
Dim n(20) As Double, d(20) As Double
Dim r As Double
n(1) = 5
d(1) = 3
For i = 2 To 19
n(i) = n(i - 1) + 2 ^ i
d(i) = n(i - 1)
Next i
r = n(19) / d(19)
MsgBox r
End Sub

Cette suite de nombre converge vers 2.

Serge


















"bcar" a écrit dans le message de news: isnou5$jjf$
Bonjour

Tout simplement parce que tu utilise des double
Je t'invite à découvrir la représentation numérique d'un nombre à
virgule flottante
http://fr.wikipedia.org/wiki/Virgule_flottante

Pour faire simple dans ton exemple, tu utilise 5/3
or 5/3 = 1.6666666666666666....
or ton type double va le stocker 1.66666666666667
donc tes calculs vont dévier très légèrement au fur et à mesure.
C'est donc ton algorithme qui ne convient pas.

Pour diminuer l'erreur ou la retarder tu pourrais déjà utiliser le type
Decimal (avec le type variant et la fonction CDec)

Je n'ai pas fais le calcul excat mais qu'est-ce qui te fais croire que
u(19) = 1,999998093.
j'ai plutôt l'impression (intuitivement et en calculant les premiers
termes) que ta suite va effectivement converger vers 2000.

bcar

Le 08/06/2011 13:04, Tatanka a écrit :
Mais, quelle est l'utilité de la boucle?


Un simple exemple de calcul itératif qui
mène à un résultat absurde. J'obtiens aussi 2000 sous Excel 2010
alors que le bon résultat est 1,999998093.
Grosse erreur, n'est-il pas ?

Serge

"Jacquouille" a écrit dans le message de news: 4def53d4$0$14257$
Bonjour:
Il me donne également 2000 avec 2003.
Mais, quelle est l'utilité de la boucle?
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."


"Tatanka" a écrit dans le message de groupe de discussion : isniei$el6$

Bonjour Messieurs Dames,

Sous Excel 2010, cette macro me donne 2000 pour u(19) :

Sub Petit_Calcul()
Dim u(20) As Double
u(0) = 3 / 2
u(1) = 5 / 3
For n = 2 To 20
u(n) = 2003 - 6002 / u(n - 1) + 4000 / (u(n - 1) * u(n - 2))
Next n
MsgBox u(19)
End Sub

Obtenez-vous le même résultat avec d'autres versions d'Excel ?

Merci de me le faire savoir,
Serge








Avatar
Tatanka
À partir du moment où un nombre de la suite est égal à 2,
tous les suivants sont égaux à 2 :
2003 - 6002 /2 + 4000 / (2*2) = 2.

Sub Pas_Erreurs1()
Dim n(1 To 100) As Double, d(1 To 100) As Double
Dim r As Double
n(1) = 5
d(1) = 3
For i = 2 To 100
n(i) = n(i - 1) + 2 ^ i
d(i) = n(i - 1)
Next i
r = n(100) / d(100)
MsgBox r
End Sub

Serge
Avatar
Tatanka
À partir du moment où deux nombres consécutifs de la suite égalent 2,
tous les suivants sont égaux à 2 :
2003 - 6002 /2 + 4000 / (2*2) = 2.

Bonne journée,
Serge
1 2