Fonctions de calcul (réels)
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)
Code:
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 |
Est-ce que quelqu'un saurait où trouver ces 4 fonctions sur les nombres décimaux et négatifs ?
J'ai déjà beaucoup fouillé le net, en vain.
Merci beaucoup d'avance, Léo.