apexinfo
Messages postés5Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention28 janvier 2010
-
1 déc. 2008 à 22:37
chessman2
Messages postés1Date d'inscriptiondimanche 4 février 2007StatutMembreDernière intervention13 décembre 2008
-
13 déc. 2008 à 01:34
je suis stupide ou j'ai des vers ou les deux, et peut-être même davantage
ça fait une journée que je tente de convertir ce pg python en VB avec un insuccès notoire et récurrent
HELP
merci
le corpus delicti est l'Algorithme de Karatsuba que j'ai trouvé en python et en serpentant sur le net.
j'aime déjà ce génial informaticien bilingue (python-VB) qui pourra m'aider à traduire
les def , % et == ne posent pas de pb, ce sont les calculs, parfois alphanumériques, parfois numériques, qui m'insupportent.
'max = 5
'def Split(l):
' if l % 2 == 0:
' return l / 2
' Else:
' return (l + 1) / 2
'def max(a, b):
' if a > b:
' return a
' Else:
' return b
'def mult(x, y):
' x = long(x)
' y = long(y)
' x_str = Str(x)
' y_str = Str(y)
' l1 = Len(x_str)
' l2 = Len(y_str)
' if (l1 < max and l2 < max):
' return x * y
' Else:
' x_split = Split(l1)
' y_split = Split(l2)
' x1 = x[0,x_split]
' x2 = x[x_split + 1,l1 - 1]
' y1 = y[0,y_split]
' y2 = y[y_split + 1,l2 - 1]
' a = mult(x1, y1)
' b = mult(x2, y2)
' c = mult(x1 + x2, y1 + y2)
' m = max(l1, l2)
' d = (c - a - b) * 10**m
' e = b**(2 * m)
' Z = a + d + e
' return z
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 2 déc. 2008 à 09:23
en gros (a affiner)
Private Function Mult(ByRef vsX As String, ByRef vsY As String) As String
Dim nLx As Long
Dim nLy As Long
Dim sX1 As String
Dim sX2 As String
Dim sY1 As String
Dim sY2 As String
Dim nA As Double
Dim nB As Double
Dim nC As Double
Dim nD As Double
Const K = 4
nLx = Len(vsX)
nLy = Len(vsY)
If (nLx <= K) Then
sX1 = "0"
sX2 = vsX
Else
sX1 = Left$(vsX, nLx - K)
sX2 = Right$(vsX, K)
If sX1 = "-" Then
sX1 = "0"
sX2 = "-" & sX2
End If
End If
If (nLy <= K) Then
sY1 = "0"
sY2 = vsY
Else
sY1 = Left$(vsY, nLy - K)
sY2 = Right$(vsY, K)
If sY1 = "-" Then
sY1 = "0"
sY2 = "-" & sY2
End If
End If
If sX1 "0" And sY1 "0" Then
nD = Val(vsX) * Val(vsY)
Else
nA = Mult(sX1, sY1)
nB = Mult(sX2, sY2)
nC = Mult(Val(sX1) - Val(sX2), Val(sY1) - Val(sY2))
nD = nA * 10 ^ (K * 2) + (nA + nB - nC) * 10 ^ K + nB
End If
Mult = FormatNumber(nD, 0, GroupDigits:=vbFalse)
End Function