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

aider calcul pi

3 réponses
Avatar
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\n" , 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\n" , sum );
return 0;
}

pourquoi retour 0.20 0 decimales
et comment faire mieux

3 réponses

Avatar
jz
...
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

Avatar
Vincent Lefevre
Dans l'article <4842f484$0$901$,
swilting écrit:

[... 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 <http://www.mpfr.org/&gt;. :)

--
Vincent Lefèvre - Web: <http://www.vinc17.org/&gt;
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/&gt;
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
Richard Delorme

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


et comment faire mieux


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