
C'est pas comme la base 2, 3, 4, ....., c'est différent là.
IciLord Nelson a écrit :Comment je peut optimiser se code svp
Code : Tout sélectionner
Procedure.s Base10VersBase10Ex(Nombre.q) ;-9223372036854775807 <= quad <= 9223372036854775808 vers 0 <= Nombre$ <= "8112260925743664697"
Static subtrahend$ = "111111111111111111111"
Protected chiffre, subtrahend, longueur, NombreSortie.q, NombreTemp$, Nombre$
NombreTemp$ = StrU(Nombre)
longueur = Len(NombreTemp$)
chiffre = Val(Right(NombreTemp$, 1))
Nombre = Val(Left(NombreTemp$, longueur - 1))
If longueur > 1
longueur - 1
EndIf
subtrahend = Val(Left(subtrahend$, longueur))
If Nombre >= subtrahend
NombreSortie = (Nombre - subtrahend) * 10 + chiffre
Nombre$ = RSet(Str(NombreSortie), longueur + 1, "0")
Else
NombreSortie = (Nombre - (subtrahend / 10)) * 10 + chiffre
Nombre$ = Str(NombreSortie)
EndIf
ProcedureReturn Nombre$
EndProcedure
Procedure.q ValBase10Ex(Nombre$) ;0 <= Nombre$ <= "8112260925743664697" vers -9223372036854775808 <= quad <= 9223372036854775807
Static addend$ = "111111111111111111110"
Protected addend, longueur, NombreSortie.q, Nombre.q
Nombre = Val(Nombre$)
longueur = Len(Nombre$)
addend = Val(Right(addend$, longueur))
NombreSortie = Nombre + addend
ProcedureReturn NombreSortie
EndProcedure
Define i, Nombre, Nombre$
For i = 0 To 1110
Nombre$ = Base10VersBase10Ex(i)
Nombre = ValBase10Ex(Nombre$)
Debug "Nombre Originale = " + Str(i) + ", Nombre compresser = " + Nombre$ + ", Nombre Originale = " + Nombre
Next
Si tu as le temps, débogue son programme.Nelson a écrit :Edit: Sa ne fonctionne pas avec 9999999999999999999... 18446744073709551615
Est-ce normale ?
Lord Nelson a écrit :Edit: Sa ne fonctionne pas avec 9999999999999999999... 18446744073709551615
Est-ce normale ?
Code : Tout sélectionner
0 <= Nombre$ <= "8112260925743664697" devient 0 <= Quad <= 9223372036854775807
Regarde dans le fichier d'aide de PB : Thèmes généraux ==> Variables, Types et Opérateurs ('Quad')Lord Nelson a écrit :J'ai mis pas mal de temps à comprendre se que vous avez voulus me dire![]()
Ok, mais est-ce normale qu'on ne puisse pas aller au delà de 9223372036854775807 ?
Par exemple se serais bien de pouvoir aller jusque 18446744073709551615 qui est aussi un quad.
Mais avec StrU() ont peut monter jusque 18446744073709551615.Quad .q 8 octets -9223372036854775808 à +9223372036854775807