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

Tcl/Tk Discussion :

Comment implémenter le générateur de Hamming ?


Sujet :

Tcl/Tk

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut Comment implémenter le générateur de Hamming ?
    Salut.

    Comment implémenter le générateur de Hamming afin qu'il marche?
    Il y a une erreur dans la conception de la fonction Hasard.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    #\ exec tclsh "$0" ${1+"$@"}
    console show
     
    package require Tcl
     
    #---------------------------------------------------
     
    proc Racine { Res1 } {
     
    if { $Res1 < 1 && $Res1 > 0 } {
         return $Res1
    } else {
         set Res1 [expr 1 - $Res1 ]
    };#end of if
     
    };#end of Racine
     
     
    #---------------------------------------------------
     
    proc Hasard { alea_e } { 
    set k [expr pow(10,4)]
    set a [expr 8*$k + 3]
    #puts "a \= $a"
    set n 1024
    set m [expr pow(2,[expr $n - 1])]
    #puts "m \= $m"
     
    set alea_e [expr $a * $alea_e ]
     
    if { $alea_e < 0 } {
         set alea_e [expr $alea_e - $m]
    };#end of if
     
    set alea_x [expr $alea_e / ($m - 1) ]
    #puts "alea_x \= $alea_x"
    return $alea_x
     
    };#end of Hasard
     
     
    #---------------------------------------------------
     
    proc Fonction { alea_e } {
     
    set alea_e [expr sqrt(abs($alea_e )) ]
    return $alea_e
     
    };#end of Fonction
     
    #---------------------------------------------------
     
    proc Generateur_Hamming {} {
    global Liste_Res
     
    set Max 100
    set graine 0.0
    set alea 0.0
    set Liste_Res ""
    set i 1
    set graine [Racine [expr (1 + sqrt(5))/2 ] ]
    set alea_e [Hasard $graine]
     
    while { $i < $Max } {
            # nombre aléatoire suivant
            set alea_e [Hasard $alea_e ]  
    #      puts "alea_e \= $alea_e"
            set nombre [Fonction $alea_e ]
            set Liste_Res [lappend Liste_Res $nombre ]
            incr i
    };#end of while
     
    puts "Liste_Res \= $Liste_Res"
    };#end of Generateur_Hamming
     
    #---------------------------------------------------
     
    Generateur_Hamming

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Par défaut
    C'est peut être une question de précision car m= 8.98846567431158e+307

    donc $m-1 n'est pas calculable

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Par défaut
    Salut.

    L'erreur provenait de la fonction Racine ainsi que
    de la valeur du plus grand entier disponible à savoir
    2^55.(soit n=55)

    J'ai modifié la dernière version. J'obtiens des nombres
    aléatoires en constante progression. Ce qui n'est pas
    mon but, car ils ne reflète pas une alternance au
    niveau des entiers obtenus.

    J'aurais aimé une meilleure distribution aléatoire
    au niveau de la "Fonction" (2^$i + exp(abs(alea_e))).

    Est-ce que quelqu'un a une meilleure solution aléatoire
    pour le générateur de Hamming?

    Merci d'avance.

    A+
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    #\ exec tclsh "$0" ${1+"$@"}
    console show
     
    package require Tcl
     
    #---------------------------------------------------
     
    proc Racine { Res1 } {
     
    if { $Res1 < 1 && $Res1 > 0 } {
         return $Res1
    } else {
         set Res1 [expr $Res1 - 1]
    };#end of if
     
    };#end of Racine
     
     
    #---------------------------------------------------
     
    proc Hasard { alea_e1 } { 
    set k [expr 10]
    set a [expr abs(8*$k + 3)]
    puts "a \= $a"
    #set n 1024
    set n 55;#(le plus grand entier disponible)
    set m [expr pow(2,[expr $n - 1])]
    #puts "m \= $m"
     
    puts "alea_e1 \= $alea_e1"
    set alea_e2 [expr $a * $alea_e1 ]
    #puts "Début: alea_e2 \= $alea_e2"
     
    if { $alea_e2 < 0 } {
         set alea_e2 [expr $alea_e2 - $m]
    };#end of if
     
    set alea_x [expr $alea_e2 / ($m - 1) ]
    #puts "alea_x \= $alea_x"
    return $alea_x
     
    };#end of Hasard
     
     
    #---------------------------------------------------
     
    proc Fonction { alea_e j } {
     
    set alea_e [expr pow(2,$j) + exp(abs($alea_e)) ]
    return $alea_e
     
    };#end of Fonction
     
    #---------------------------------------------------
     
    proc Generateur_Hamming {} {
    global Liste_Res
     
    set Max 100
    set graine 0.0
    set alea 0.0
    set Liste_Res ""
    set i 1
    set graine [Racine [expr (1 + sqrt(5))/2 ] ]
    set alea_e [Hasard $graine]
     
     
    while { $i < $Max } {
            # nombre aléatoire suivant
    	set alea_e [Hasard $alea_e ]  
    #        puts "alea_e (Generateur_Hamming) \= $alea_e"
            set nombre [Fonction $alea_e $i]
            set Liste_Res [lappend Liste_Res $nombre ]
            incr i
    };#end of while
     
    puts "Liste_Res \= $Liste_Res"
    };#end of Generateur_Hamming
     
    #---------------------------------------------------
     
    Generateur_Hamming

Discussions similaires

  1. comment implémenter un générateur de packages msi?
    Par lwiji86 dans le forum Windows
    Réponses: 2
    Dernier message: 02/10/2009, 10h52
  2. Comment implémenter lemonldap?
    Par Aldo dans le forum Apache
    Réponses: 7
    Dernier message: 25/01/2007, 21h32
  3. Réponses: 2
    Dernier message: 02/12/2005, 17h22
  4. Comment implémenter un Datawarehouse ?
    Par raslain dans le forum Alimentation
    Réponses: 2
    Dernier message: 20/10/2005, 11h09
  5. [C++ builder] Comment utiliser un générateur d'ID?
    Par Nicodemus dans le forum Débuter
    Réponses: 2
    Dernier message: 17/05/2004, 13h25

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