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

C Discussion :

conversion flottant en binaire et vis versa


Sujet :

C

  1. #41
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Points : 63
    Points
    63
    Par défaut
    1.0/3.0 c'est 1/3? soit 0.3333?

  2. #42
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par sandball22
    1.0/3.0 c'est 1/3? soit 0.3333?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1.0/3.0 == 1.0/3 == 0.333333<...>
    ATTENTION: En C, 1/3 est une division entière dont la valeur est 0.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #43
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Je ne sais pas si c'est très pertinent ni même plus rapide que les divisions successive par 2 présentée par Mujigka mais je tente quand même...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        /* Calcul du nombre minimal de bits nécessaires pour représenter
           l'entier considéré */
        if (n >= 0)
        {
            do
            {
                n /= 2;
                MIN_BITS++;
            }
            while (n > 0);
        }
        else
        {
            MIN_BITS = MAX_BITS;
        }
    Soit la fonction f(n) qui pour tout entier n != 0 donne le nombre chiffre pouvant le représenter :

    f(n) = floor( log10(abs(n)) + 1)

    Exemple avec -956 :

    f(-956) = 3 ( oui je sais tout le monde avait vu que -956 avait trois chiffres )

    Partant de ça, on a aussi la fonction suivante, g(n) qui nous donne le nombre minimal de bits pour un entier n != 0:

    g(n) = ceil( (f(n) -1 ) / log10(2) )

    [ pour le maximum : ceil( (f(n) ) / log10(2) ) ]

    Ex avec 956 :

    nombre minimal de bits : ceil ( 2 / log10(2) ) = ceil ( 6,64...) = 7 bits
    nombre maximal de bits : ceil ( 3 / log10(2) ) = ceil ( 9.96..) = 10 bits

    Effectivement, 956(10) = 1110111100(2) soit 10 bits.

    Exemple avec la plage des nombres à 3 ou 4 chiffres en utilisant les formules :

    100 à 999 : 7 à 10 bits
    1000 à 9999 : 10 à 14 bits

    après je ne sais pas si c'est plus rapide / efficient que la méthode des divisions... (et j'espère ne pas m'être trompé non plus... ).

  4. #44
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    La méthode des divisions revient à faire MIN_BITS = log10(number)/log10(2) + 1. Je ne me suis pas occupé de savoir ce qui était le plus rapide.

    En revanche, il n'est pas nécessaire d'effectuer le calcul pour les nombres négatifs, car ceux-ci sont toujours représentés sur sizeof(int) * CHAR_BIT bits, quelle que soit la représentation en complément à 2, ou en complément à 1.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Conversion nombre décimal <-> binaire (signé et flottant)
    Par lecteur1001 dans le forum Simulink
    Réponses: 12
    Dernier message: 06/01/2011, 16h49
  2. Conversion byte en int et vis versa
    Par Mister Nono dans le forum Langage
    Réponses: 8
    Dernier message: 17/07/2008, 17h50
  3. conversion de decimale vers binaire et vice versa
    Par Abdelkaoui dans le forum Qt
    Réponses: 1
    Dernier message: 17/04/2008, 11h53
  4. Conversion anglais-francais et vis-versa
    Par lazzeroni dans le forum BIRT
    Réponses: 43
    Dernier message: 04/04/2006, 17h13

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