Partage
  • Partager sur Facebook
  • Partager sur Twitter

les calculs

    24 décembre 2005 à 11:32:18

    Citation


    La division




    Les divisions fonctionnent normalement sur un ordinateur quand il n'y a pas de reste. Par exemple,6 / 3 ça fait 2, votre ordinateur vous donnera la réponse juste. Jusque-là pas de souci.

    Prenons maintenant une division avec reste comme 5 / 2.
    5 / 2, si vous calculez bien, ça fait 2.5 :)

    Et pourtant ! Regardez ce que fait ce code :

    Code : C

    Citation


    long resultat = 0;

    resultat = 5 / 2;
    printf ("5 / 2 = %ld", resultat);




    Code : Console

    Citation


    5 / 2 = 2




    Il y a un gros problème. On a demandé 5 / 2, on s'attend à avoir 2.5, et l'ordinateur nous dit que ça fait 2 !

    Il y a anguille sous roche. Nos ordinateurs seraient-ils stupides à ce point ?
    En fait, quand il voit les chiffres 5 et 2, votre ordinateur fait une division de nombres entiers. Cela veut dire qu'il tronque le résultat, il ne garde que la partie entière (le 2).

    Eh mais je sais ! C'est parce que resultat est un long ! Si ça avait été un double, il aurait pu stocker un nombre décimal à l'intérieur !


    Même pas :D
    Essayez le même code en transformant juste resultat en double, et vous verrez qu'on vous affiche quand même 2.

    Si on veut que l'ordinateur affiche le bon résultat, il va falloir transformer les nombres 5 et 2 de l'opération en nombres décimaux, c'est-à-dire écrire 5.0 et 2.0 (ce sont les mêmes nombres, mais pour l'ordinateur ce sont des nombres décimaux, donc il faut une division de nombre décimaux) :

    Code : C

    Citation


    double resultat = 0;

    resultat = 5.0 / 2.0;
    printf ("5 / 2 = %lf", resultat);




    Code : Console

    Citation

    5 / 2 = 2.500000




    Là le nombre est correct. Bon il affiche plein de zéros derrière si ça lui chante, mais le résultat reste quand même correct.


    Cette propriété de la division de nombres entiers est super importante. Il faut que vous reteniez que pour un ordinateur :
    5 / 2 = 2
    10 / 3 = 3
    4 / 5 = 0
    Si vous voulez avoir un résultat décimal, il faut que les nombres de l'opérations soient décimaux :
    5.0 / 2.0 = 2.5
    10.0 / 3.0 = 3.33333
    4.0 / 5.0 = 0.8

    En fait, en faisant une division d'entiers comme "5 / 2", votre ordinateur répond à la question "Combien y a-t-il de fois 2 dans le nombre 5 ?". La réponse est 2 fois. De même, combien de fois y a-t-il le nombre 3 dans 10 ? 3 fois".

    Mais alors me direz-vous, comment on fait pour récupérer le reste de la division ?
    C'est là que super-modulo intervient :)



    Il n'est pas préciser que le %ld doit être changé en %lf ! N'oubliez pas de le changer si vous voulez que votre code fonctionne ! Si vous ne le mettez pas, votre code ne sera pas bon, car l'ordinateur cherchera un nombre entier et non pas un nombre décimal, ce qui change tout car dans ce cas
    • Partager sur Facebook
    • Partager sur Twitter
      24 décembre 2005 à 11:37:04

      J'ai envie de dire : utilisez cout et cin qui sont bien plus pratiques d'utilisation... Mais on va encore me répondre que c'est du C++...
      • Partager sur Facebook
      • Partager sur Twitter
        24 décembre 2005 à 12:03:38

        Citation : Chahine

        J'ai envie de dire : utilisez cout et cin qui sont bien plus pratiques d'utilisation... Mais on va encore me répondre que c'est du C++...

        C'es du C++ :p


        • Partager sur Facebook
        • Partager sur Twitter

        les calculs

        × 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.
        • Editeur
        • Markdown