Page 1 sur 1

Faire une multiplication

Publié : jeu. 25/août/2005 13:48
par Dr. Dri
retour à l'école primaire :lol:
(activez l'assembleur)

Code : Tout sélectionner

Procedure Mul(a.l, b.l)
  Protected Result.l, Sign.l
  
  If a < 0
    a = -a
    Sign + 1
  EndIf
  
  If b < 0
    b = -b
    Sign + 1
  EndIf
  
  Repeat
    If b & 1
      Result + a
    EndIf
    SHL a, 1
    SHR b, 1
  Until b = 0
  
  If sign = 1
    Result = -Result
  EndIf
  
  ProcedureReturn Result
EndProcedure

RandomSeed( ElapsedMilliseconds() )
For i = 1 To 10
  x = Random($79999999)
  y = Random($79999999)
  
  Debug Mul(x, y)
  Debug x * y
  Debug "------"
Next i
Dri 8)

Publié : jeu. 25/août/2005 14:23
par Dr. Dri
Comparer deux nombres non signés

Code : Tout sélectionner

Procedure Cmp(a.l, b.l)
  Protected Result.l, i.l, aa.l, bb.l
  
  If a <> b
    i = 32
    While i
      i - 1
      
      aa = (a >> i) & 1
      bb = (b >> i) & 1
      
      If aa <> bb
        If aa
          Result = 1
        Else
          Result = -1
        EndIf
        i = 0
        a = b
      EndIf
      
    Wend
  EndIf
  
  ProcedureReturn Result
EndProcedure

x = $80000000
y = $00000015

Debug Cmp(x, y)

;comparaison signée
If x > y
  Debug "1"
ElseIf x < y
  Debug "-1"
Else
  Debug "0"
EndIf
Dri 8)

Publié : jeu. 25/août/2005 17:47
par Backup
t'arrete pus !! :D

Publié : jeu. 25/août/2005 18:11
par lionel_om
Kler, il est parti le Dri.
J'crois il veut créer PB 4 :P :jesors:

Publié : jeu. 25/août/2005 18:46
par Dr. Dri
La multiplication est signée donc techniquement elle sert à rien lol
sauf peut être à avoir un début pour une multiplication non signée ^^

j'ai besoin de nombres non signés pour un truc sur lekel je bosse en ce moment... alors comme j'y connais rien en assembleur je me débrouille en PB...

Dri

Publié : ven. 26/août/2005 9:09
par bombseb
je ne comprend pas l'interet de faire ca...c'est plus rapide ?
il n'y a pas de fonction dans PB pour faire ca ?

Publié : ven. 26/août/2005 9:49
par lionel_om
Le "fonction" PB c'est : :10: :jesors:

Publié : ven. 26/août/2005 10:17
par bombseb
Le "fonction" PB c'est :
Code:
*
oui je sais bien, mais ca ne répond pas à ma question 8O

Publié : ven. 26/août/2005 11:53
par lionel_om
La version PB sera surement plus rapide.
Et pour l'intérête : y'en a pas, à par le plaisir de coder la fonction :lol:

Publié : ven. 26/août/2005 11:53
par Dr. Dri
regarde la comparaison, tu vois bien que PB et ma fonction ne donnent pas le même résultat ?
C'est un problème de nombres signés ou non signés... Un nombre non signé est toujours positif. par exemple un octet non signé ira de 0 à 255. un octet signé pourra être négatif et aura une valeur entre -128 et 127.

Y'a une sacrée différence nan ? Surtout que la maintenant tout de suite ca m'arrangerai des nombres non signés et je sais pas comment on s'y prend pour en manipuler...

Une dernière chose... Les deux fonctions travaillent "bit à bit" ce qui permet de voir de quelle manière le processeur s'y prend pour les faire ;)

Dri