Page 1 sur 1
Faire une multiplication
Publié : jeu. 25/août/2005 13:48
par Dr. Dri
retour à l'école primaire

(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

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

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

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

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 :

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

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

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