C > Calcul euler (test)

TitreCalcul euler (test)
Postée le09-02-2011
Affichée204
Mini-lien
Description

euler (test)

EtatNe contient pas d'erreurs. Ne contient pas d'erreurs.
Code d'insertion
Options
Afficher les numéros de lignes  Mettre la source en plein ecran  Selectionner la source  Partager sur Facebook 
Téléchargement Telecharger en format txt  Telecharger en format pdf  Telecharger en format c
Plein ecran
#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+=(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
*/