aider calcul pi

Le
swilting
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>

inline
long double
f ( long double x )
{
return ( 4.0 / ( 1.0 + x*x ) );
}


int
main ( int argc , char **argv )
{

long long int num_trap = 0;
long long int i = 0;
long double x = 0;
long double h = 0;
long double sum = 0;

/*alarm(600);*/

num_trap = atoll (argv[1]);

printf ("nombre trapezes : %Ld" , num_trap );

h = 1 / (long long int)num_trap;
x = 0;
sum = 0;

for ( i = 2 ; i < num_trap ; i++ )
{
sum += f(x) * h;
x += h;
}

sum += (f(0) + (f(1))) * h
/ ( ( long double ) 2 );

printf ("pi=%.24lf" , sum );
return 0;
}

pourquoi retour 0.20 0 decimales
et comment faire mieux
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jz
Le #6755191
...
pourquoi retour 0.20 0 decimales
et comment faire mieux


Salut

Pour faire mieux, commence par dire bonjour, puis essaie de caster
correctement dans l'expression qui calcule h.

Jacques

Vincent Lefevre
Le #6755181
Dans l'article swilting
[... note: je n'ai pas regardé en détail le code ...]
printf ("pi=%.24lfn" , sum );
return 0;
}

pourquoi retour 0.20 0 decimales


Tu veux dire 20 décimales correctes? Sur ta plateforme (Linux/x86?)
les long double sont probablement des flottants en double précision
étendue, i.e. avec 64 bits de significande.

? 64*log(2)/log(10)
%1 = 19.26591972249479649367928926

En gros, sans tenir compte des erreurs d'arrondi, tu as 19 décimales.

et comment faire mieux


Utiliser MPFR
--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Richard Delorme
Le #6755581

h = 1 / (long long int)num_trap;
h = 1.0 / num_trap;


et comment faire mieux


Comme ça :
http://bellard.org/pi/pi.c

Publicité
Poster une réponse
Anonyme