Adloun

programmation Java (école d'ingénieur) · Chapitre 2 · Exercice de TD

Factorielles

Types, variables et expressions · niveau 2

Énoncé

On calcule puis , d'abord dans un int, puis dans un long. Comparer. Pourquoi le résultat dans l'int est-il faux ? Pourquoi est-il positif, alors que le dépassement donne souvent un nombre négatif ? Jusqu'à quelle factorielle un long suffit-il ?

Corrigé


public class Factorielles {
    public static void main(String[] args) {
        int fi = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12;
        long fl = 1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12;
        System.out.println("12! int  = " + fi + ",  long = " + fl);
        fi = fi * 13;
        fl = fl * 13;
        System.out.println("13! int  = " + fi + ",  long = " + fl);
    }
}

12! int  = 479001600,  long = 479001600
13! int  = 1932053504,  long = 6227020800

dépasse : l'int calcule modulo . Or , qui est positif et inférieur à : le résultat faux a l'air plausible, ce qui le rend dangereux. Le dépassement ne donne un nombre négatif que si le résultat réduit tombe au-delà de . Le suffixe 1L force tous les produits en long. Un long (jusqu'à environ ) contient , mais pas .

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →