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

MATLAB Discussion :

retrouver le nombre de bits partie entière partie flottante d'un nombre


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut retrouver le nombre de bits partie entière partie flottante d'un nombre
    bonjour

    Je voudrais savoir s'il existe une fonction qui lorsqu'elle reçoit un nombre, me donne le nombre de bits qu'il faut pour la partie entière et pour la partie flottante.

    Exemple :

    xxx(256) --> 8,0
    xxx(16,125) --> 4,3

    J'ai regardé mais je ne suis tomber que sur fi, qui ne fait pas ce que je veux.

    Merci par avance

    EDIT : je m'excuse, je voulais poster sur le forum Matlab, si un modo pouvait déplacer
    EDIT FLB : Fait

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    je ne pense pas qu'il y ait de méthode toute faite.
    Pour la partie entière il suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    length(dec2bin(floor(16.125)))
    Mais pour la partie décimale il faut que tu connaisses à l'avance quelle est le nombre maximum de digit que tu peux avoir, à cause de ceci :
    http://matlab.developpez.com/faq/?pa...bres_flottants
    Si tu te fixes une longueur maximale de la partie décimale, tu peux la transformer en entier, enlever les zéros de droite et enfin utiliser le code ci dessous.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Heu, rapidement j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function [bits_entier, bits_flottant] = bits_entier_flottant(nbr)
     
    nbr_entier = floor(nbr);
    bits_entier = nextpow2(nbr_entier)
     
    nbr_flottant = nbr-floor(nbr);
    bits_flottant = ceil(abs(log2(nbr_flottant)))
    Tu en penses quoi ?

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Ok pour la partie entière, mais un petit test avec 13.125 me dit qu'il suffit de 3 bits pour écrire 125.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par yamin69 Voir le message
    le nombre de bits qu'il faut pour la partie entière et pour la partie flottante.
    Pour ma part, je ne vois pas le rapport entre le nombre de chiffres à gauche et à droite de la virgule et un quelconque nombre de bits...


    Sans plus de précision, une méthode consiste à passer par une conversion en chaine de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> [s,r] = strtok(num2str(16.125),'.');
    >> numel(s)
     
    ans =
     
         2
     
    >> max(numel(r)-1,0)
     
    ans =
     
         3

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Citation Envoyé par FLB Voir le message
    Ok pour la partie entière, mais un petit test avec 13.125 me dit qu'il suffit de 3 bits pour écrire 125.
    Bonjour,
    Ce n'est pas pour écrire 125, mais pour écrire 0.125, dont la puissance de deux la plus proche est 2^-3, soit 3 bits.



    Citation Envoyé par Dut Voir le message
    Pour ma part, je ne vois pas le rapport entre le nombre de chiffres à gauche et à droite de la virgule et un quelconque nombre de bits...


    Sans plus de précision, une méthode consiste à passer par une conversion en chaine de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> [s,r] = strtok(num2str(16.125),'.');
    >> numel(s)
     
    ans =
     
         2
     
    >> max(numel(r)-1,0)
     
    ans =
     
         3
    Comment ça pas de rapport ? ^^

    Je ne travail pas sur ordi, mais sur de l'embarqué. Il faut optimiser un maximum et éviter de consommer bêtement des ressources.
    Pour reprendre l'exemple de FLB, pour écrire 13.125 on a besoin de 4 bits pour écrire un nombre jusqu'à 16 (=2^4)
    Ensuite, pour écrire le 0.125, j'ai besoin d'un LSB = 2^-3

    Si, par exemple, je veux écrire ce nombre dans un bloc constante Xilinx, je lui dirais que ce nombre est :
    - un signé,
    - 4 bits pour la partie entière
    - 3 bits pour la partie flottante
    - 1 bit pour le signe

    Ensuite j'ai testé ton code, il ne semble pas fonctionner pour [13.124 ou 13.126]

Discussions similaires

  1. Partie entière d'un nombre réel
    Par Lost in dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/02/2008, 18h28
  2. Réponses: 7
    Dernier message: 20/12/2006, 18h18
  3. partie décimale / partie entière
    Par NoBru dans le forum Access
    Réponses: 3
    Dernier message: 21/10/2005, 12h00
  4. Fonction retournant la partie entière d'un nombre
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/11/2004, 15h58

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