Pour ne pas subir la limite de taille des "integer ou long" j'utilise les "string"
J'ai essayé de reproduire le calcul "manuel"
Seuls les entiers positifs sont traités.
Source / Exemple :
dans le zip
Conclusion :
La division m'a donné pas mal de fil à tordre et fait un peu bricolo,
mais apparemment elle fonctionne, alors soyez indulgent !
La fonction Racine carrée pas super rapide :-) utilise la methode manuelle décrite ici:
http://pagesperso-orange.fr/therese.eveilleau/pages/truc_mat/textes/r_carree_anc.htm
Temps de calcul:
les 2000 premiers chiffres de racine carrée de 3 en moins de 2 minutes
mais hélas une heure pour 10000
Heureusement la vitesse n'est pas ma priorité dans cette application.
Public Function Puissance(X As String, Y As String, cde As Boolean, nb_chiffres As Long) As String
Puissance = ""
nb_chiffres = 0
If X <> "" And Y <> "" Then
If verify_entiers_positifs(X, Y) Then
If X = "0" Then
Puissance = "0"
Else If X "1" Or Y "0" Then
Puissance = "1"
Else
If Val(Y) > 0 And Val(Y) < 10001 Then '10001 temps de calcul inhumain ???(a determiner)
Puissance = X
Dim j
For j = 1 To Val(Y) - 1
Puissance = Multiplication(Puissance, X, 0, 0)
Next j
nb_chiffres = Len(Puissance)
Else
Puissance = "Y est trop grand, temps de calcul inhumain, trouver une autre methode"
End If
End If
End If
Else
Puissance = "Des nombres entiers positifs uniquement"
End If
End If
End Function
Pour info: Val(Y) donne un Double
et
20^55=360287970189639680000000000000000000000000000000000000000000000000000000
temps calcul < 1 sec (ouf!)
Vois le prog de DNOB700
http://www.vbfrance.com/codes/JUSTE-AUTRE-LIBRAIRIE-CALCUL-PRECISION-INFINIE_22182.aspx
plus "pro" que le mien.
Je te conseille de remplacer les chaine de caractère par des tableau d'octet, tu verras, c'est bcp plus rapide (il faut juste des routines de conversion pour les afficher) et le code est plus simple (les retenu par exemple pour la multiplication sont plus facile etc.)
En fait je ne gère que les entiers positifs.
Si tu as supprimé la Sub suivante , le résultat est forcémment
érroné.
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim X
X = Asc(Chr(KeyAscii))
If (X < 48 Or X > 57) Then KeyAscii = 0 'que des chiffres
If X 8 Then KeyAscii 8 'sauf le rub out
End Sub
Vous pouvez recupérer , modifier , adapter , améliorer et publier
c'est du pur open source !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.