Nombre Décimaux en C

monty

Habitué
Voici 2 petits programmes que j'ai créé. Le premier est pour calculer E et le second pour calculer Pi. Les deux fonctionnent mais leurs réponses ne dépassent jamais 6 décimals de précision. J'aimerais que les programmes soient capables d'inscrire les réponses avec plus de décimal et peut-être pouvoir leur demander un certain nombre de décimal.

E:
[cpp]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
double base = 1, increment = 2, number = 2, probase = 0, loop = 0;

for (loop = 0 ; loop < 100000000000 ; loop++)
{
probase = base * increment;
number = number + (1 / probase);
base = probase;
increment++;

if (loop == 100000000)
{
printf("100 000 000\n%lf\n", number);
}

}

printf("%lf", number);

return 0;
}
[/cpp]

Pi:
[cpp]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
double base = 3, increment = 0, number = 0, numb = 0, loop = 0;

number = 1;

for (loop = 0 ; loop < 1000000 ; loop++)
{
if (increment == 0)
{
numb = (1 / base);
number = number - numb;
base+=2;
increment++;
}

if (increment == 1)
{
numb = (1 / base);
number = number + numb;
base+=2;
increment--;
}
}
number = 4 * number;
printf("%lf\n", number);

return 0;
}
[/cpp]
 

Emmanuel Delahaye

Expert

J'ai une boucle infinie....
[fixed]Project : Forums
Compiler : GNU GCC Compiler (called directly)
Directory : C:\dev\forums2\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c: In function `main':
main.c:9: warning: integer constant is too large for "long" type
main.c: At top level:
main.c:5: warning: unused parameter 'argc'
main.c:5: warning: unused parameter 'argv'
Linking console executable: console.exe
Process terminated with status 0 (0 minutes, 3 seconds)
0 errors, 3 warnings
[/fixed]
Problème de taille max de constante. Utiliser LONG_MAX, ULONG_MAX (<limits.h>) ou DBL_MAX, LDBL_MAX (<float.h>)

Pour augmenter la précision de l'affichage :
[cpp] printf ("%.10f\n", number);[/cpp]
ou
[cpp] printf ("%g\n", number);[/cpp]
 

monty

Habitué
Merci pour la réponce, j'ai simplement changer le %lf pour %.100f. Pour ce que est de la boucle infini, je n'ai jamais eu ce problème.
 

Emmanuel Delahaye

Expert

Faut peut être pas exagérer non plus. La précision des nombres à virgule flottante est loin d'être infinie...

Tu peux l'augmenter avec long double au lieu de double (affichage %Lf ou %.20Lf, par exemple), mais 100, non, faut pas rêver...

Les limites sont définies dans <float.h>.
 

boub popsyteam

Grand Maître
Apres tu peux tjrs te coder une routine de calcul en précision infinie (i.e. dont la limite est définissable à la volée) pour ce genre de cas (e, pi, etc ...) mais bon ce n'est peut etre pas nécessaire dans ton cas ...

cf:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 832
Membres
1 586 367
Dernier membre
ramkin
Partager cette page
Haut