Bonjour à vous tous !
Je cherche depuis pas mal de temps dans les différents sites de sources VB un ensemble de fonctions permettant d'effectuer des calculs "usuels" sur des chaines.
Je m'explique, au lieu d'utiliser les types numériques (très limités pour des applications de math), on utiliserai le type string pour stocker un nombre et on lui ferai subir des opérations comme on les apprenait en CE1 (additions à retenues...). Cela permet de passer de la limite des quelques dizaines de digits des types numériques aux deux milliards de caractère inscriptibles dans une chaine. La seule limite de calcul en serait donc la puissance de l'ordinateur.
Je cherche donc les 4 opérations élémentaires (addition, soustraction, multiplication et division) sous cette forme mais travaillant sur des chaines gérant le séparateur décimal (soit avec une mantisse soit avec le caractère directement dans le chaine) et les nombres négatifs.
J'ai réussi à programmer une fonction qui additionne une chaine d'entier naturel de cette manière, elle additionne des nombres de plusieurs milliers de digits en moins d'une seconde : (Si vous ne voyez pas ce que je veux dire)
Est-ce que quelqu'un saurait où trouver ces 4 fonctions sur les nombres décimaux et négatifs ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Public Function Addition(ByVal pNombre1 As String, ByVal pNombre2 As String, Optional ByVal pArrondi As Boolean = True) As String ' Equilibrage & Déclarations pNombre1 = EquilibrerChiffres(pNombre1, pNombre2) pNombre2 = EquilibrerChiffres(pNombre2, pNombre1) Dim cResultat As String = "", cRetenue As Byte = 0 Dim cTemp1 As Byte, cTemp2 As Byte, cTemp As Byte ' Balayage For i As Integer = pNombre1.Length To 1 Step -1 ' Addition monodigitale cTemp1 = Mid(pNombre1, i, 1) cTemp2 = Mid(pNombre2, i, 1) cTemp = cTemp1 + cTemp2 + cRetenue cRetenue = 0 ' Retenue If Len(cTemp.ToString) = 2 Then cRetenue = Val(Mid(cTemp.ToString, 1, 1)) cTemp = Val(Mid(cTemp.ToString, 2, 1)) End If cResultat = cTemp.ToString & cResultat ' Concaténation Next i If pArrondi Then ' Retourne l'écriture arrondie Return Val(cRetenue & cResultat).ToString Else ' Retourne l'équiture complète If cRetenue <> 0 Then Return cRetenue & cResultat Else : Return cResultat End If End If End Function Public Function EquilibrerChiffres(ByVal pNombre1 As String, ByVal pNombre2 As String) As String If pNombre1.Length < pNombre2.Length Then Dim cZeros As String = "" For i As Integer = 1 To (pNombre2.Length - pNombre1.Length) cZeros &= "0" Next Return cZeros & pNombre1 Else : Return pNombre1 End If End Function
J'ai déjà beaucoup fouillé le net, en vain.
Merci beaucoup d'avance, Léo.
Partager