|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() |
Voici quelques fonctions permettant de faire des calculs exacts sur des nombres qui peuvent être très grands. En fait, les nombres ici sont représentés par des chaînes de caractères (dynamiques), donc on calcule exactement comme à la main (évident). J'ai décidé de représenter les nombres directement par des chaînes de caractères pour faciliter la saisie et l'affichage, mais évidemment ça consomme ...
J'ai utilisé le programme greatns (Great Numbres) pour calculer 2008! (factorielle de 2008), ça donne (valeur exacte !) : Code :
|
||
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 39 ![]() |
Oui ça marche mais j'ai fait un programme qui va plus vite. Je n'ai pas les sources sous la main tout de suite désolé, je les donnerai bientôt si ça peut intéresser quelqu'un.
Voilà quelques pistes qui marchent pour l'optimisation : utiliser plutôt les vraies valeurs pour représenter les chiffres ça évite de calculer (i-'0') à chaque fois et faire moins de malloc() dans la multiplication ça aussi ça prend pas mal de temps cpu Pour toutes les opérations qui nécessitent d'allouer de la mémoire temporaire, en général on peut passer en paramètre un pointeur (mémoire déjà allouée) où la fonction travaille tranquillement. Comme ça même plusieurs instructions peuvent utiliser cet espace alloué au début du programme. En envoyant en paramètre la longueur des nombres on évite d'utiliser strlen() trop souvent (du coup les structures sont intéressantes) Il y a d'autres optimisations, que je n'ai pas toutes faites (représentation en binaire au lieu du décimal...) avec ça j'ai programmé le cryptage RSA sur des nombres de taille arbitraire (500 chiffres, en 10s) et ça va assez vite (enfin tout est relatif) |
|
|
00
|
|
|
#3 |
![]() ![]() |
Merci de tes remarques. En effet je n'ai pas cherché à optimiser, c'est juste un programme que j'ai fait pour m'amuser. Mais d'accord je vais le modifier quand j'en aurai le temps, et si tu peux poste également le tiens.
|
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 39 ![]() |
VOilà mes sources, mais je n'ai pas acherché à faire une version "grand public" donc c'est un peu pas propre du tout. Désolé.
j'ai donné avant les quelques optimisations que j'ai apportées, jette un coup d'oeil si ça t'intéresse. Certaines fonctions ne sont pas encore finalisées mais ça arrive. En fait partout où il y a "dec" dans les noms de fonctions/fichiers/structures c'est que les nombres sont représentés en décimal. Je suis en train de faire une petite version pour la représentation binaire, histoire de voir si on y gagne, mais j'en doute. Sinon le code est assez simple, je vais bientôt rajouter la fonction racine. Si tu compiles mon programme tel quel tu as le cryptage RSA : rentre un nombre, la puissance, le modulo et il donne le reste. Lien vers le code : ici |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com