English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Toutes les catégories

4 réponses

en fait ta formule ressemble à un développement limité et il existe une approche mathématique pour savoir vers quoi ça tend.

pour trouver la valeur approchée, le programme serait le suivant :

#include "stdio.h"
void main()
{
unsigned long NbIter;
double som;
unsigned long i;

NbIter=1000000L;
som=0;
for (i=1;i<=NbIter;i++)
{
double denominateur;
unsigned long j;
denominateur=0;
for(j=1;j<=i;j++) denominateur+=j;
som+=1.0/denominateur;
}
printf("Valeur au bout de %ld itérations=%lf\n",NbIter,som);
}

pour savoir quand s'arrêter (nombre d'itérations), il faut déterminer le nombre de chiffres après la virgule qui nous intéresse. le type "double" donne 15 chiffres de précision. or on additionne des termes de plus en plus petits et le premier terme vaut 1. il faut donc s'arrêter quand le dénominateur vaut 10^15.

pour savoir à quel rang cela correspond, on étudie la somme du dénominateur en fonction de i. pour cela on additionne la somme dans un sens puis dans l'autre.


1 + i =i+1
2 +i-1 =i+1
3 +i-2 =i+1
...
i-1 +2 =i+1
i +1 =i+1

le dénominateur vaut donc i*(i+1)/2

exemple avec i=3, d=1+2+3=6
i*(i+1)/2=3*(3+1)/2=3*4/3=12/2=6 donc ca marche !

il reste à trouver la valeur de i pour d=10^15
i*(i+1)/2=1000000000000000
i*(i+1)=2000000000000000
i²*+i-2000000000000000=0
delta=b²-a-4ac=1+4*2000000000000000=8000000000000001

i=(-b-racine(delta))/2a
ou i=(-b+racine(delta))/2a

comme on sait que i est positif, on oublie la première ligne

et on a
i=(-b+racine(delta))/2a
i=44721359

il suffit donc de faire environs 45 millions d'itérations pour avoir les 15 décimales justes.
si on continue le calcul au dela de cette valeur, la valeur de som de changera plus car le terme vaudra zéro.

par contre, pour un calcul aussi long, il faut optimiser le programme sinon, il y en a pour des semaines. par exemple, le dénominateur peut de calculer de manière plus simple en ajoutant la nouvelle valeur de i à la valeur du tour précédent.

ca donnerais :

#include "stdio.h"
void main()
{
unsigned long NbIter;
double som;
unsigned long i;
double denominateur;

NbIter=44700000L;
som=0;
denominateur=0;
for (i=1;i<=NbIter;i++)
{
denominateur+=i;
som+=1.0/denominateur;
}
printf("Valeur au bout de %ld itérations=%lf\n",NbIter,som);
}

réponse, il semblerait que la somme converge vers la valeur 2

c'était intéressant.

bon amusement

2006-10-18 20:12:21 · answer #1 · answered by Ramis V 7 · 0 0

Par lettre n! =...
Exemple 6! = 720

2006-10-18 06:19:37 · answer #2 · answered by Anonymous · 0 0

Ce calcul simple est transformé en formule d'abord, la formule est bien montrée dans la méthode de calcul d'aire (ce n'est pas rectangle ni trapèze mais à partir de simpson). Il suffit de créer une fonction puis d'implémenter la formule très simplifiée :-)

2006-10-18 06:15:30 · answer #3 · answered by Vasco de Gama 2 · 0 0

c'est un factoriel!
il doit exister une fonction dans la librairie math du genre Fact(x)

2006-10-18 06:01:33 · answer #4 · answered by cortins 7 · 0 0

fedest.com, questions and answers