convertion réel en binaire avec scilab
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

convertion réel en binaire avec scilab



  1. #1
    gloups13

    convertion réel en binaire avec scilab


    ------

    Bonsoir,
    Dans le cas de mon travail, je dois élaborer un algorithme génétique pour optimiser la masse d'un pont en treillis métallique.

    Pour cela, je crée de manière presque aléatoire des chromosomes ayant deux gènes. L'un de ces gènes possède les coordonnées de tous les nœuds du pont. Or initialement, les coordonnées de ces nœuds sont des réels. J'ai donc effectué un code pour coder ces réels en binaire pour ensuite remplir mon chromosome.
    voilà mon programme en scilab:

    Code:
    //code en binaire la partie réelle d'un nombre réel.
    a=10.8;//nombre réel à coder.
    X=[];
    b=abs(fix(a));// je prends la valeur absolue de a.
    i=1;
    q=1;
    while q<>0 & b<>0
        q=fix(b/2);// q= quotient
        r=pmodulo(b,2);//r=reste
        X(1,i)=r;
        b=q;
        i=i+1;
    end
    
    
    
    m=size(X,"c");//renvoi le nombre de colonne de X.
    
    X_arrangée=zeros(1,m);
    
    for i=1:1:m// Je remets dans l'ordre la matrice X.
        X_arrangée(1,i)=X(1,m+1-i);
    end
    
    if a>=0//Je rajoute un bit=0 si a<0 et 1 si a>0.
        X_arrangée=[zeros(1,1),X_arrangée];
    else
        X_arrangée=[ones(1,1),[X_arrangée]];  
    end
    
    //                                                                                
    
    //code la partie décimale d'un nombre réel.
    d=abs(a-fix(a));//je récupère la partie décimale de a.
    e=2*d;
    j=1;
    J=[];
    Eps=10^-2;
    while e>Eps
        if e<1
            J(1,j)=0;
            e=2*e;
        elseif e>=1
            J(1,j)=1;
            e=e-1;
        end
        j=j+1;        
    end
    X_concaténée=[X_arrangée,J];// j'ajoute à la partie réelle de a la partie décimale.
    disp(X_concaténée,'X_concaténée')
    je pense que mon code n'est pas trop faux. Cependant, pour connaître le nombre de bits minimum occupé par un réel x appartenant à l'intervalle[a,b] est: l>=log(b-a)/e) avec e la précision souhaitée.
    Donc si je prends in intervalle I=[-2,2] et que je veux coder x=1.82 avec une precision de 10-2 alors il faudra réserver l=9 bits pour coder 1.82 en binaire.
    Malheureusement, mon programme me renvoi pour le codage de 1.82:
    Code:
     X_concaténée
    
    
             column 1 to 14
    
       0.   1.   1.   0.   1.   0.   0.   1.   0.   0.   0.   0.   1.   0.
    
             column 15 to 28
    
       1.   0.   1.   0.   1.   0.   0.   1.   0.   0.   1.   0.   1.   0.
    
             column 29 to 42
    
       1.   0.   0.   0.   0.   0.   1.   0.   0.   1.   0.   0.   0.   0.
    
             column 43 to 56
    
       1.   0.   1.   0.   1.   0.   1.   0.   0.   1.   0.   0.   1.   0.
    
             column 57 to 70
    
       1.   0.   1.   0.   0.   0.   0.   0.   1.   0.   0.   1.   0.   0.
    
             column 71 to 81
    
       0.   0.   1.   0.   1.   0.   1.   0.   1.   0.   1.
    soit l=82 et non pas 9!!!!

    Vous avez un peu des idées sur ce qui ce passe?
    merci de votre aide.
    Cdt

    -----

  2. #2
    jiherve

    Re : convertion réel en binaire avec scilab

    Bonsoir,
    Un flottant est déjà codé en binaire donc en regardant le codage IEEE 754 on récupère directement la valeur à un décalage et un offset près.
    http://docs.oracle.com/cd/E19957-01/..._goldberg.html
    Donc ne pas réinventer l'eau tiède!
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    gloups13

    Re : convertion réel en binaire avec scilab

    Ouf j'ai pas trop compris ce qui est dit.
    Est ce que vous pouvez me donner un exemple de conversion. Par exemple convertir 1.94 en binaire avec une précision de 10^-2.
    Merci.

  4. #4
    jiherve

    Re : convertion réel en binaire avec scilab

    Re
    si le nombre est déja codé en flottant il suffit de récuperer le codage, en l’occurrence la mantisse sera 0,94 puisque le 1 est implicite et l'exposant 127 donc 0.
    Mais avant de chercher une représentation binaire il faudrait déjà en définir le format car 9 bits cela ne signifie rien si l'on ne précise pas le nombre de bits consacrés à la représentation de la partie entière et celui dévolu à la partie fractionnaire.
    ex 9 bits pour la partie entière et aucun pour la fractionnaire alors 1,94 = 000000010 (excès) erreur = 6*10^2 ou 000000001 (défaut) erreur = 1
    si par contre on choisi un codage 4.5 donc 4 bits entiers et 5 fractionnaires alors 1,94 = 0001,11110 erreur = 3*10^-3
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    Dlzlogic

    Re : convertion réel en binaire avec scilab

    Bonsoir,
    Moi, j'ai une question idiote : pourquoi est-il nécessaire de coder les flottants en binaire. Pour économiser de l'espace mémoire, ou pour autre-chose ?
    On parle d'algorithme génétique, de masse de treillis de point, puis de chromosome, ça m'intéresserait d'avoir un lien sur ces notions.
    Merci d'avance.

  7. #6
    jiherve

    Re : convertion réel en binaire avec scilab

    Bonjour,
    pourquoi est-il nécessaire de coder les flottants en binaire
    ben c''est plus que nécessaire car c'est par définition pour ces nombres et la norme IEEE 754 permet la portabilité, il existe d'autres codages, chacun est libre d'en inventer un si cela permet une optimisation quelconque.

    JR
    l'électronique c'est pas du vaudou!

  8. #7
    Dlzlogic

    Re : convertion réel en binaire avec scilab

    Bonjour Jiherve,
    J'ai pas dû bien poser ma question. Je sais bien que les machines travaillent en binaire. Je sais bien qu'il est bon pour un informaticien de savoir cela, de savoir s'en servir etc.
    Ma question concerne le sujet du présent fil. Il y a des termes que je n'arrive pas à relier (ex binaire, pont, treillis, génétique, chromosome). Je suppose que tout ça est dans un contexte particulier que j'ignore, alors je me renseigne. Une petite intuition me dit que ça doit être en rapport avec un calcul par la méthode d'éléments finis, ce que j'aimerais trouver est un article qui utilise tous ces termes dans un même paragraphe.
    Merci d'avance.

  9. #8
    jiherve

    Re : convertion réel en binaire avec scilab

    Re
    Je comprends mais là c'est en dehors de mes maigres compétences.
    JR
    l'électronique c'est pas du vaudou!

  10. #9
    Dlzlogic

    Re : convertion réel en binaire avec scilab

    En fait, j'aurais dû chercher tout seul, et j'aurais trouvé ça : https://fr.wikipedia.org/wiki/Algori...A9n%C3%A9tique
    Mais cela demande une longue lecture et relecture.

  11. #10
    gloups13

    Re : convertion réel en binaire avec scilab

    Bonsoir,
    Oui en effet votre lien correspond exactement à ce que je veux faire: un algorithme génétique.

    Sinon pour revenir au code, c'est bon j'ai résolu le problème. il y avait une petite faute mais maintenant il marche. merci de m'avoir aidé.

Discussions similaires

  1. [SCILAB]Optimisation avec contraintes non linéaire dynamique sous scilab avec fmincon possible ?
    Par invite0ef6e499 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/06/2016, 18h20
  2. Convertion 8 Bits Série en temps réel
    Par invite447a43f2 dans le forum Électronique
    Réponses: 8
    Dernier message: 31/08/2015, 07h41
  3. Scilab : traitement de données en temps réel
    Par invitea4dfe8e5 dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 06/07/2010, 15h12
  4. Conversion réel en binaire en vhdl !!
    Par invite169e9a75 dans le forum Électronique
    Réponses: 0
    Dernier message: 05/05/2010, 15h03
  5. Convertion binaire To BCD avec pic16f
    Par invite2ae8d33b dans le forum Électronique
    Réponses: 24
    Dernier message: 26/08/2006, 15h09