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
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
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