Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Débutant
    Inscrit en
    novembre 2003
    Messages
    1 019
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 1 019
    Points : 121
    Points
    121

    Par défaut Convertion décimal en binaire avec virgule

    Bonjour tout le monde

    J'ai un problème pour convertir des nombre décimal en binaire avec un virgule.

    Exemple:

    12,5 qui est en base 10 qui est que je souhaiterais convertir en binaire.


    Je ne vois pas comment faire avec la virgule.

    Pourriez vous m'indiquer une methode?

    Merci

    Cordialement
    je suis un développeur debutant qui cherche à comprendre.

    Certain livre sont pas facile à comprendre.

  2. #2
    Membre confirmé
    Inscrit en
    juillet 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : juillet 2004
    Messages : 238
    Points : 256
    Points
    256

    Par défaut

    Tu travaille toujours avec des puissances de 2 ...
    12.5 = 8+4+0.5 = 2^3 + 2^2 + 2^-1 = 110,1

  3. #3
    Rédacteur
    Avatar de Zavonen
    Inscrit en
    novembre 2006
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 767
    Points : 1 656
    Points
    1 656

    Par défaut

    Si a priori la précision (nombre de décimales que tu veux après la virgule), par exemple 10. Tu multiplies tout par 1024, tu travailles avec des entiers (conversion binaire noramle) puis tu places la virgule.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre Expert
    Inscrit en
    mai 2008
    Messages
    1 018
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 1 018
    Points : 1 139
    Points
    1 139

    Par défaut

    Bonjour.
    12,5 qui est en base 10 qui est que je souhaiterais convertir en binaire.
    Il y a la méthode classique :
    1) Tu divises la partie entière par 2 jusqu'au reste égal à 0 ou à 1 puis tu prend à l'envers le quotient et les restes)
    2) Tu multiplies la partie fractionnaire par 2 jusqu'à obtenir 0 ou le nombre de chiffres que tu souhaites (en enlevant la partie entière à chaque multiplicatiion)

  5. #5
    Rédacteur
    Avatar de Zavonen
    Inscrit en
    novembre 2006
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Âge : 67

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 767
    Points : 1 656
    Points
    1 656

    Par défaut

    Code Python :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    def binaire_int (n):
        """conversion d'un entier décimal ->binaire"""
        if n<=1:
            return n
        else:
            return binaire(n/2)*10+n%2
     
    def binaire_float(x,p):
        """conversion d'un décimal à virgule en binaire à virgule précision p"""
        r=x
        for i in range(0,p):
            r=r*2
        b=binaire_int(int(r))
        for i in range(0,p):
            b=b/10.0
        return b
     
    def main():
        print binaire_int(10)
        print binaire_float(1.800,5)
     
    if __name__ == '__main__':
        main()
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  6. #6
    Membre Expert
    Inscrit en
    mai 2008
    Messages
    1 018
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 1 018
    Points : 1 139
    Points
    1 139

    Par défaut

    Un autre exemple sous Matlab:
    "e" est l'échelle (nombre de bits après la virgule)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function Nb2=dec_bin(n,e)
    Q = 2;
    T='';
    %Partie entière
    ne = fix(n);
    while Q >= 2
     Q = fix(ne/2);
     R = ne-2*Q;
     T = [T num2str(R)];
     ne = Q;
    end
    T = [T num2str(R)];
    i = 1:length(T);
    pe = T(length(T)-i+1);
    %Partie fractionaire
    nf = n-fix(n);
    pf = '';
    for i=1:e
      pf = [pf num2str(fix(nf*2))];
      nf = nf*2-fix(nf*2);
    end
    Nb2=[pe ',' pf]

  7. #7
    Membre habitué Avatar de titourock
    Homme Profil pro Jocelyn
    Développeur informatique
    Inscrit en
    novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Nom : Homme Jocelyn
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2008
    Messages : 156
    Points : 147
    Points
    147

    Par défaut

    Il ne faut jamais perdre de vue que notre système de représentation est en base 10 c'est à dire que l'on peut représenter tout nombre à l'aide de puissance de 10 (j'aime bien dire aussi "paquets" ça démystifie la chose...)

    Ici, tu ne parles pas que d'entiers mais de décimaux donc on inclut également les puissances de 10 négatives.
    Le binaire c'est exactement la même chose mais avec...des paquets de 2

    Ainsi écrit en base 10 : 12,5 = 10 + 2*10^0 + 5*10^(-1)
    De la même façon, on décompose en puissance de 2 : 12,5 = 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 + 1*2^(-1)

    Ainsi, en binaire 12,5 est représenté par 1100,1.

    à bientôt

  8. #8
    Débutant
    Inscrit en
    novembre 2003
    Messages
    1 019
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 1 019
    Points : 121
    Points
    121

    Par défaut

    Bonjour tout le monde

    Je souhaite maintenant faire l'inverse.

    EX:

    J'ai 0,11101110

    Je souhaiterais le convertire en décimale.

    Je vous avertie que je fais le calcule à la main sans calculatrice.

    Merci.


    A +
    je suis un développeur debutant qui cherche à comprendre.

    Certain livre sont pas facile à comprendre.

  9. #9
    Membre Expert
    Inscrit en
    mai 2008
    Messages
    1 018
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 1 018
    Points : 1 139
    Points
    1 139

    Par défaut

    Bonjour.
    Une solution en Matlab :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    clear
    m='0.11101110';
    n=length(m)-2;
    N=0;
    M=m(3:end);
    for i=1:n
      c=str2num(M(i));
      N=N+c*(1/2)^i;
    end
    N
    Tu peux aussi t'inspirer de la discussion :
    http://www.developpez.net/forums/d74...-nombre-signe/

  10. #10
    Débutant
    Inscrit en
    novembre 2003
    Messages
    1 019
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 1 019
    Points : 121
    Points
    121

    Par défaut

    Bonsoir

    Pouriez vous me dire comment faire le calcule à la main.

    Merci.

    A +
    je suis un développeur debutant qui cherche à comprendre.

    Certain livre sont pas facile à comprendre.

  11. #11
    Rédacteur/Modérateur
    Avatar de pseudocode
    Homme Profil pro Xavier Philippeau
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Nom : Homme Xavier Philippeau
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 081
    Points
    15 081

    Par défaut

    Citation Envoyé par argon Voir le message
    Pouriez vous me dire comment faire le calcule à la main.
    0,11101 (binaire)
    = 0*(2^0) + 1*(2^-1) + 1*(2^-2) + 1*(2^-3) + 0*(2^-4) + 1*(2^-5) (décimal)
    = 0*(1) + 1*(1/2) + 1*(1/4) + 1*(1/8) + 0*(1/16) + 1*(1/32)
    = 0.90625
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •