Calculette pour les très, très, vraiment très grands nombres

Soyez le premier à donner votre avis sur cette source.

Vue 8 549 fois - Téléchargée 615 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

ok, merci je vais tester ça... pour le temps d'exécution c pas grav', du moment que le résultat est là :)
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
J'avais fait une fonction Puissance ( une simple boucle de la fonction Multiplication ), mais les temps de calcul étaient "inhumains" ( 2^10000 en plus d'une minute )

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.
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

Et comment faire pour les puissances?... je n'arrive pas à obtenir un résultat "normal", c'est à chaque fois ce type de résultat... par exemple pour 20^55 on a 3,6028797018963968e+71... des sources que j'ai trouvé ici celle-ci se rapproche le plus de ce que j'aimerais obtenir omme résultat...
Messages postés
44
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
5 novembre 2007

Ton code est pas mal, mais un peu lent pour les grand nombre.

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.)
Messages postés
73
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
17 septembre 2008
4
Merci pour cette bonne note ça m'arrive pas trop souvent !
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 !
Afficher les 9 commentaires

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.