Un P4 battu par une casio ???
Bonjour à tous,
Voilà je met ce message car je voullais programmer une fonction factorielle pour de grand nombre et à ma grande surprise ma casio fait ça mieux qu'un programme écrit en C, je m'explique :
Ma calculatrice casio (graph 65) peut calculer jusque 9.99999...9e+99 (quand même). C'est pourquoi je peux calculer 69! sans problème.
Voici la fonction factorielle que j'ai écrit en C
Code:
1 2 3 4 5 6 7 8 9
|
long double factorielle(int a)
{
int i;
long double b = 1L;
for(i = a ; i > 0 ; i--)
b *= i;
return b;
} |
j'ai choisi long double car c'est le type ayant la plus grand capacitée que j'ai trouvé. Mais ça reste quand même très limité : je ne passe pas au dessus de 20!
La taille de long double sur mon compilateur (gcc) est de 12 octets soit 12*8 = 96 bits (ce qui me permet une limite positive de (2^96)-1 = 7.922816251e+28 )
Mais comment est-ce possible ? Ma calculatrice n'a pourtant pas un processeur 32 bits (je suppose moins) !! Comment faire pour obtenir des nombre pouvant aller jusque 9.999...9e+99 ??
Merci d'avance pour vos réponses.
Re: Un P4 battu par une casio ???
Citation:
Envoyé par websurfeur
Voilà je met ce message car je voullais programmer une fonction factorielle pour de grand nombre et à ma grande surprise ma casio fait ça mieux qu'un programme écrit en C
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
#include <stdio.h>
#include <stdlib.h>
double factorielle(int a)
{
int i;
double b = 1L;
for (i = a ; i > 0 ; i--)
b *= i;
return b;
}
int main(void)
{
double f;
int n;
n = 170;
f = factorielle(n);
printf ("fact(%d) = %g\n", n, f);
n = 171;
f = factorielle(n);
printf ("fact(%d) = %g\n", n, f);
return EXIT_SUCCESS;
} |
donne (mingw/Windows XP)
Code:
1 2 3
|
fact(170) = 7.25742e+306
fact(171) = 1.#INF |
Re: Un P4 battu par une casio ???
Bonjour,
Citation:
Envoyé par websurfeur
j'ai choisi long double car c'est le type ayant la plus grand capacitée que j'ai trouvé.
Il existe (en C99) les long long codés sur au moins 64 bits! avec le type unsigned long long double tu devrais avoir de quoi t'ammuser ;)
Re: Un P4 battu par une casio ???
Citation:
Envoyé par gege2061
avec le type unsigned long long double tu devrais avoir de quoi t'ammuser ;)
Gné ? unsigned long long peut être ?
Re: Un P4 battu par une casio ???
Citation:
Envoyé par Emmanuel Delahaye
Citation:
Envoyé par gege2061
avec le type unsigned long long double tu devrais avoir de quoi t'ammuser ;)
Gné ?
unsigned long long peut être ?
:oops: euh, je me suis emmêlé les pinceaux.