CALCULETTE POUR LES TRÈS, TRÈS, VRAIMENT TRÈS GRANDS NOMBRES

cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015 - 20 avril 2004 à 09:28
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022 - 3 janv. 2008 à 20:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22098-calculette-pour-les-tres-tres-vraiment-tres-grands-nombres

vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022
3 janv. 2008 à 20:58
ok, merci je vais tester ça... pour le temps d'exécution c pas grav', du moment que le résultat est là :)
cs_akim77 Messages postés 73 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 17 septembre 2008 4
3 janv. 2008 à 20:20
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.
vegetalain Messages postés 747 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 11 août 2022
3 janv. 2008 à 17:02
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...
dnob700 Messages postés 44 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 5 novembre 2007
22 avril 2004 à 17:29
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.)
cs_akim77 Messages postés 73 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 17 septembre 2008 4
21 avril 2004 à 20:21
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 !
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
20 avril 2004 à 21:40
Resalut,

G trouvé une faille

Si tu fait :
4 - 1,333 tu obtient -103 329 au lieu de 2,667
De même
-4 + 1 = 5 au lieu de -3

Il y a en fait un pb au niveau des signes et virgules dans les nbres sources

Mais cela reste un super truc.
Encore bravo
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
20 avril 2004 à 20:40
Chapeau bas l'ami,
ton truc est terrible je te met 10/10.
Je me suis permis de créer une dll a partir de ton code, afin de le réutiliser dans n'importe quel prog sans tout rettaper. Mais tout le merite te revient.
Je ne sais pas pourquoi, mais je n'arrive pas à publier la source.
Si tu veux que je te l'envoi afin que tu le fasses (cela serait plus logique). Donne moi ton email.
++
OverDarck Messages postés 116 Date d'inscription jeudi 12 juillet 2001 Statut Membre Dernière intervention 23 juin 2005
20 avril 2004 à 11:29
un mot :ENORME c'est vraiment genial et pile ce que je cherchais !!!
Win Xp fait la meme chose avec sa power toy calculator mais s'arrete a 512 chifre et puis avori a sa portée un algo de calcul manuel des 4 principales operations, ca c'est vraiment cool !!!!!
Je cherchais a faire un truc dans le genre mais sa aurai etait tres tres lent si j'avais reussit...
Frenchement BRAVO, GRANDIOSE
10/10
@++ merci, et bonne prog
(j'essairai d'adapter ton prog, pour fair qq chose de plus abouti)
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
20 avril 2004 à 09:28
impressionnant,
une petite critique : tu devrais mutualiser ta procédure pour éliminer les zéros non significatifs du résultat.
Un super bon point : si tu rajoute le calcul modulo, tu pourras implémenter RSA.
Ceci dit, je vais faire un peu de recup dans ton code.
Rejoignez-nous