je pense que tout le monde connait le fonction factorielle qui peut être présenté comme cela:
long fact(const int n)
{
long res = 1;
for(int i = 2; i <= n; i++)
res*=i;
return res;
}
Elle existe aussi en version récursive.
-----------
Bon, maintenant, ma question: ELLE EST Où LA FONCTION FACTORIELLE DE BASE? Celle qui devrait se trouver dans <cmath>?
Le web est inondé de tutoriel pour recoder la fonction à l'aide de la récursivité, mais je trouve aussi plein de personne qui cherche la fonction standard sans trouver de réponse.
Ne me dites qu'en même pas qu'elle n'existe pas dans la librairie standard du langage C? alors que des fonctions comme pow(x,puissance) ont été codées.
éffectivement elle n'est pas dans cmath ni dans math.h mais elle y est dans la gsl .
bref oui, il faut soit codée soit même ses fonctions mathématique soit faire appel à d'autre lib parce que math.h n'est pas très exaustif c'est vrais .
Salut, une "vraie" fonction factorielle est un peu plus compliquée que tu le penses, du coup elle n'est pas incluse dans la bibliothèque C car c'est dur de faire une version qui soit générique.
La fonction telle que tu l'as codée serait une catastrophe pour du code professionel (même si malheureusement il y 50000 exemples sur internet avec ce code), elle ne marche que pour les valeurs jusqu'à 12 quand long est codé sur 32 bits, les résultats suivants sont complètement faux
#include <stdio.h>
unsigned long int fact1(const int n)
{
unsigned long int res = 1;
for(int i = 2; i <= n; i++)
res*=i;
return res;
}
unsigned long long fact2(const int n)
{
unsigned long long res = 1;
for(int i = 2; i <= n; i++)
res*=i;
return res;
}
int main(void) {
for (int i = 0; i < 20; i++) {
printf("fact1(%d): %lu\n", i, fact1(i) );
printf("fact2(%d): %llu\n", i, fact2(i) );
}
return 0;
}
Résultat:
fact1(0): 1
fact2(0): 1
fact1(1): 1
fact2(1): 1
fact1(2): 2
fact2(2): 2
fact1(3): 6
fact2(3): 6
fact1(4): 24
fact2(4): 24
fact1(5): 120
fact2(5): 120
fact1(6): 720
fact2(6): 720
fact1(7): 5040
fact2(7): 5040
fact1(8): 40320
fact2(8): 40320
fact1(9): 362880
fact2(9): 362880
fact1(10): 3628800
fact2(10): 3628800
fact1(11): 39916800
fact2(11): 39916800
fact1(12): 479001600
fact2(12): 479001600
fact1(13): 1932053504
fact2(13): 6227020800
elle ne marche que pour les valeurs jusqu'à 12 quand long est codé sur 32 bits
Et ta fonction fac2 va jusqu’à combien?
Fact2 ne marche que jusqu'à 20, pour 21 elle retourne une valeur fausse ;-) Cette fonction fact2 sert juste à montrer que fact1 ne marche pas, mais fact2 a le même problème : elle ne détecte pas les overflow et retourne des valeurs fausses au delà d'une certaine valeur.
elle ne détecte pas les overflow et retourne des valeurs fausses au delà d'une certaine valeur.
Edit: max-om-93 Pas de pub!
- Edité par max-om-93 8 décembre 2014 à 13:22:09
utiliser la fonction factorielle sans la recoder
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Et ta fonction fac2 va jusqu’à combien?
GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.