#include <stdlib.h>
#include <stdio.h>
#include <math.h>
double suite();
double arrondir();
int main(int argc, char **argv)
{
int n; double sn,val;
n = atoi(argv[1]); /* récuperation du paramètre n donné en argument */
printf("n=%d\n",n);
sn = suite(n-1); /* calcul de s(n-1) */
val=arrondir(sn-log(n),n); /* on arrondie v(n)=s(n-1)-ln(n) à 1/n */
if(sn-log(n) > val) /* on recupere la seule valeur comprise en v(n) et u(n) à 1/n près */
val+=(double)1/n;
printf("%.10f << constante calculee\n",val);
printf("0,5772156649015328606065120 << constante sur wikipedia\n");
return 0;
}
double suite(int n)
{
int i; double sn=0;
if(n==0)
return 0;
for(i=1; i<=n; ++i)
sn=sn+(double)1/i;
return sn;
}
double arrondir(double val, int n)
{
/* pour arrondir un nombre à 1/n */
val*=n;
val= round(val);
val/=n;
return val;
}
/*
EXEMPLE DE SORTIES :
>> euler.exe 10000
n=10000
0.5772000000 << constante calculee
0,5772156649015328606065120 << constante sur wikipedia
>> euler.exe 1000000000
[sortie]
n=1000000000
0.5772156650 << constante calculee
0,5772156649015328606065120 << constante sur wikipedia
TEMPS D'EXECUTION :
n=10^4 -> 0.016s
n=10^9 -> 8.978s
*/