Grands nombres et operations

Signaler
Messages postés
82
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2010
-
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
-
Bonjour a tous ,
Je souhaiterai manipuler de grands nombre et la seul solution que j'ai trouvé c'est de les mettre dans des variables de type Variant.
Si des nombres d'assez grandes tailles passent (x = 5717861879157567178789718717),il m'est en revanche impossible d'effectuer certaines opérations avec (comme x Mod 2 ou x And 1) sans quoi vb m'affiche un dépassement de capacité .
Y a t-il des conversions implicites durant ces opérations  Que puis-je faire pour y remédier
Merci d'avance de m'aider a résoudre ce petit probléme.

4 réponses

Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Commence par oublier les variants. "Ce ne sont pas tes amis !!!"
Si tes nombres dépassent la capacité de calcul de VB, tu peux stocker ces nombres dans des strings.
Par contre, tu devras alors concevoir tes propres procédures/fonctions pour effectuer les opérations dessus.
Messages postés
82
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2010

Je veut bien les mettre dans des string,mais j'en récupéré la valeur comment ?
Je ne peut pas la convertir en variable numérique si aucune ne ne peut en stocker le contenue.Même avec les opérations standards,vb fini par faire des arrondies monstrueux lorsque les nombres font plus de 15 chiffres et qu'il les écrit alors sous la forme 1.234567890E+65.
Quelqu'un a t-il deja créer un type personnalisé capable de contenir de grands nombres sans les écrire sous forme scientifique ?
Cela m'aiderai beaucoup.
Messages postés
82
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2010

Je suis tombé sur cette page qui explique comment récupérer le nombre une fois qu'il est dans une string. (http://vb.developpez.com/faq/?page=Langage#typedecimal).
Pas de probléme de ce coté la,mais encore une fois,vb arrondie les nombres et en vient,par exemple a me dire que 471...7/2 = fix(471...7/2).
N'y a t-il aucune librairie qui permet de manipuler de grands nombre avec précision ?
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Pourquoi dis-tu "mais j'en récupéré la valeur comment ?"
Ton nombre est dans une string et il y reste.
Il faut juste que tu te fasse une fonction pour chaque opération dont tu as besoin. Par exemple :
Function Addition(Byval N1 As String, Byval N2 As String) As String
Dim i As Long, j As Long, Buffer As String, R As Long, L As Long

L = Len(N1)
R = 0
Buffer = ""
For i = L To 1 Step -1
R = CLng(Mid$(N1,i,1)) + CLng(Mid$(N2,i,1)) + R
If R < 10 Then
Buffer = CStr(R) & Buffer
R = 0
Else
R = R - 10
Buffer = CStr(R) & Buffer
R = 1
End If
Next
Addition = Buffer
End Function

Enfin un truc dans le genre devrait le faire, car la, ca ne fonctionnera que si les deux nombres N1 et N2 sont de même longueur (en nombre de chiffres, je veux dire)
Idem pour la soustraction, l'addition, etc ...