Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment transformer un nombre rationnel en fraction

    27 décembre 2010 à 21:37:20

    Bonjour,

    voila je crée un programme en C++ qui (entre autre) permettrai de transformer un nombre rationnel en fraction ...

    alors je fais le nombre*10 jusqu'a ce qu'il ne soit plus décimal,

    donc la fraction : (nombre*10^nombre_de_fois) sur nombre_de_fois.

    mais lorsque l'on a une suite périodique et illimitée (ex: 0.33[3]) comment faire ???

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      27 décembre 2010 à 21:44:27

      <math>\(N = 0.\overline{3}\)</math>
      <math>\(10N = 3.\overline{3}\)</math>
      <math>\(10N - N = 3\)</math>
      <math>\(9N = 3\)</math>
      <math>\(N = \frac{1}{3}\)</math>

      <math>\(N = 0.\overline{97452}\)</math>
      <math>\(100000N = 97452.\overline{97452}\)</math>
      <math>\(100000N - N = 97452\)</math>
      <math>\(99999N = 97452\)</math>
      <math>\(N = \frac{97452}{99999}\)</math>
      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2010 à 14:53:15

        Le problème avec la suite périodique illimitée c'est qu'en C++ tu ne peux pas utiliser le type float ou même double

        En effet, le nombre de chiffre après la virgule que tu peux représenter est limité ( dépend du type )

        Donc pour remédier au problème, il faut que tu crées un nouveau type qui indiquera la chaine à répéter

        Et tu devras aussi indiquer une syntaxe spéciale pour la saisi

        C'est l'éternel problème du calcul formel
        • Partager sur Facebook
        • Partager sur Twitter
          28 décembre 2010 à 16:36:17

          Citation : akhenathon

          Le problème avec la suite périodique illimitée c'est qu'en C++ tu ne peux pas utiliser le type float ou même double

          En effet, le nombre de chiffre après la virgule que tu peux représenter est limité ( dépend du type )

          Donc pour remédier au problème, il faut que tu crées un nouveau type qui indiquera la chaine à répéter

          Et tu devras aussi indiquer une syntaxe spéciale pour la saisi

          C'est l'éternel problème du calcul formel


          Sauf que à mon avis il veut justement partir d'un nombre qui a un nombre limité de décimales et le mettre sous forme de fraction, donc il suffit qu'il aille jusqu'au bout des décimales de son nombre et s'il ne trouve pas de répétition avant la fin de supposer qu'il n'y a que des 0 après... ( et s'il trouve une répétition de supposer qu'elle continue même s'il ne connait pas toutes les décimales )
          • Partager sur Facebook
          • Partager sur Twitter
            28 décembre 2010 à 23:14:30

            Dans ce cas, il dira (supposons que l'on ait une précision à 12 digits) que 0.333333333333 = 1/3 = 333333333333/1000000000000 .

            Je ne sais pas ce qu'il code, mais si c'est rapport aux maths, des absurdités risquent vite d'apparaître.
            • Partager sur Facebook
            • Partager sur Twitter
              28 décembre 2010 à 23:26:38

              Citation : Pierre89

              Dans ce cas, il dira (supposons que l'on ait une précision à 12 digits) que 0.333333333333 = 1/3 = 333333333333/1000000000000 .

              Je ne sais pas ce qu'il code, mais si c'est rapport aux maths, des absurdités risquent vite d'apparaître.


              Non justement j'ai dit s'il ne trouve pas de répétition avant la fin genre 0.123456.Dans ce cas il peut suppose qu'il n'y a que des 0 après. Mais dans le cas où il y a une répétition genre 0.33 il peut supposer que ça continue comme ça et que c'est donc 0.33...


              Edit : ah non désolé j'ai mal compris ce que tu disais et oui bien sur ça peut poser des problèmes et ce n'est pas exact, forcément puisque il y a un nombre limité de décimales mais bon ce que je proposais ça serais pour implémenter quelque chose comme la fonction frac sur la calculette qui transforme 0.333333333333333 en 1/3 ce qui peut être pratique par exemple pour calculer une valeur approchée d'une racine d'une fonction et tu suppose que tu ne va avoir que des trucs simples genre 1/3 ...
              • Partager sur Facebook
              • Partager sur Twitter
                29 décembre 2010 à 17:13:15

                Citation : rom1504

                comme la fonction frac sur la calculette qui transforme 0.333333333333333 en 1/3



                Jette ta calculette ! C'est une ineptie à l'état pur.

                Je ne dis pas qu'il est interdit de faire des approximations quand cela s'impose (recherche algorithmique de racines comme tu l'as dit), mais : premièrement, le posteur ne dit en rien qu'il a besoin d'approximations (pour du calcul formel par exemple, c'est mal barré) ; deuxièmement, l'approximation se fait plutôt usuellement de <math>\(\mathbb Q\)</math> vers <math>\(\mathbb D\)</math>, et non l'inverse.

                Bref, 1/3 vaut 1/3, un point c'est tout. S'il veut conserver des valeurs exactes, alors il utilise des artifices : une fraction peut être représentée par une paire (nominateur,dénominateur) ; un rationnel vu sous forme 'décimale' peut être vu comme la donnée de deux chaînes de caractères dans [0 - 9] (puisqu'il y a répétition, il suffit de l'écrire une fois) ; etc.

                Peut-être le posteur pourrait-il nous en dire plus sur le but de son programme...
                • Partager sur Facebook
                • Partager sur Twitter

                comment transformer un nombre rationnel en fraction

                × 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