IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

algo multiplier 2 nb base10 et en virgule flottante


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 196
    Par défaut algo multiplier 2 nb base10 et en virgule flottante
    voila je dois faire un programme pour multiplier deux nombres représentés en base 10 et en virgule flottante entre eux

    Merci de m'aider

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 196
    Par défaut
    ah oui j'oubliais il faut normaliser de facon n'avoir qu'un chiffre à gauche de la virgule du resultat
    merci encore

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu peux nous en dire plus sur la façon dont sont stockés les nombres qu'il faut multiplier ?

    Ils sont sous forme de chaine de caractères ? Ce sont des int ? des float ?

    Et sous quelle forme, sous quelle structure de donnée doit être renvoyé le résultat de la multiplication ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 196
    Par défaut
    Concernant la façon dont sont stockés les nombres qu'il faut multiplier
    On ne m'a rien indiqué
    Il seront sous forme de float vu que c'est le chapitre que nous étudions
    et aucune info sur la structure de donnée doit être renvoyé le résultat de la multiplication
    Mais je pense qu'il faut faire quelque chose d'assez simples sans trop se prendre la tete sur la structure de donnée
    Merci en tout cas

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est bizarre ton histoire. C'est en quel langage de programmation ?

    Si c'est en C :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a = 123456789;
    float b = 9876.5432;
    float resultat = (float)a * b;

    Ca se fait tout seul.

    Cet exercice n'est intéressant que si tu définit toi même tes flottants :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Flottant {
      int mantisse;
      int exposant;
    }

    Par exemple, pour le flottant 4,53*10^-6, la mantisse est égale à 453 et l'exposant est -6. Je me suis aidé de la page de wikipédia sur les flottants et sur la notation scientifique.


    On va d'abord créer une fonction qui transforme un int en Flottant :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Flottant int_to_Flottant(int a) {
      struct Flottant flottant;
      flottant.mantisse = a;
      flottant.exposant = 0;
      while(abs(a) > 9) {
        a = a/10;
        ++flottant.exposant;
      }
      return flottant;
    }

    abs(a) est la valeur absolue de a.

    Maintenant on définit la multiplication entre un Flottant et un Flottant :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Flottant multiplicationFF(Flottant a, Flottant b) {
      Flottant resultat;
      resultat.mantisse = a.mantisse * b.mantisse;
      resultat.exposant = a.exposant + b.exposant;
      return resultat;
    }

    Pour le coup d'additioner les exposants, j'ai juste remarqué que
    (5,12*10^32) * (1,00*10^8) == (5,12*10^40)
    un autre exemple :
    (3,50*10^-10) * (2,00*10^15) == (7,00*10^5)

    Enfin on définit la multiplication entre un int et un Flottant :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Flottant multiplicationIF(int a, Flottant b) {
      Flottant c = int_to_float(a);
      Flottant resultat = multiplicationFF(b, c);
      return resultat;
    }

    Si c'est à peu près ce que tu cherche, je peux améliorer le code.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 196
    Par défaut
    je crois qu'on nous demande plus de faire sous forme de pseudo code
    pas forcement dans un langage particulier
    mais en tous cas ce que tu m'as fourni m'aide déjà beaucoup
    Pour le coup d'additioner les exposants, j'ai juste remarqué que
    (5,12*10^32) * (1,00*10^8) == (5,12*10^40)
    un autre exemple :
    (3,50*10^-10) * (2,00*10^15) == (7,00*10^5)
    je l'avais remarqué aussi
    mais quand on fait (3,50 * 10^-10) * (51,2 * 10^15) comment faire pour normaliser le resultat de facon à n'avoir qu'un chiffre avant la virgule
    Merci en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Algo] Fonction tableau en base10 et N
    Par Takahitekun dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 30/09/2012, 15h33
  2. [D7] Problème de virgule flottante
    Par Magnus dans le forum Langage
    Réponses: 17
    Dernier message: 22/09/2005, 14h56
  3. Réponses: 6
    Dernier message: 16/05/2004, 19h03
  4. [langage] Arithmétique en virgule flottante
    Par marouanitos dans le forum Langage
    Réponses: 3
    Dernier message: 19/09/2003, 14h48
  5. [Kylix] Kylix3: Pb de virgule flottante
    Par hubble dans le forum EDI
    Réponses: 1
    Dernier message: 22/06/2003, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo