Juste une autre librairie de calcul en précision infinie

Soyez le premier à donner votre avis sur cette source.

Vue 4 320 fois - Téléchargée 388 fois

Description

Il s'agit d'un ensemble de fonctions pour aditionner, soustraire, multiplier, diviser et efectuer un modulo sur des entiers naturels de plusieurs miliers de chiffres.

Conclusion :


Ce code est un peu brouillon car je l'ais ecrit par strates successives.

Les premières fonctions que j'ai écrites (que l'on ne voit plus dans le code) sont celles qui commencaient par Str... et manipulaient des chaines de caractères.
Je les ais ensuite remplacé par les fonctions Byte... qui manipule des tableaux d'entier.
Enfin, je suis passé au DByte... qui stockent deux fois plus de donnée dans la même mémoire, augmentant du même coup la rapidité de traitement.
Les fonction C... sont les fonction de conversion entre les types Str... (utilisé pour saisir les données) Byte... et DByte...

Sinon, le nom des fonctions est suffisamment explicite.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
Multiplication intégrée.
le fait que je soit désormais en base 10 000 au lieu de 10, pour la multiplication me fait faire bien moins d'opérations.

j'utilise, comme toi, la méthode classique, apprise sur les bancs de l'école.
pour deux nombres aléatoires de 4096 chiffres,
ton code met environ 9.75 secondes. dans les mêmes conditions, le mien mets 0.031 secondes.

Tout est relatifs, 4096 c'est des "petits" nombres, mais pour ce qui m'interesse, c'est amplement suffisant.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
nuance saisie.

concernant le code, rien d'exceptionnel, j'ai optimisé la chose de manière a limiter les accès aux tableaux...
limiter les ReDim
les montants dans les tableaux sont stockes dans l'ordre inverse de ce qu'on lit (les chiffres de poids faible en premier)
après, la facon dont c'est stocké et géré, l'user le sait pas... il créé ses BigInt, joue avec. a la fin, il peut en demander le rendu.
Messages postés
44
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
5 novembre 2007

Penser que ça ne rivalise pas avec de l'assembleur n'est pas la bonne façon de voir les choses je pense. Car le meilleur code est certainement obtenu en compilant du C ou du C++ avec ICC. Le résultat est tellement tordu (et optimisé) qu'aucun humain ne pourrait faire aussi bien.

Il n'y a plus vraiment de notion de coprocesseur de calcul dans les processeurs moderne (ça date du temps ou on rajoutait un processeur dans la machine). Il y a différents jeux d'instructions pour différent usages, le descendant du coprocesseur de calcul qui est le FPU utilise son jeux d'instruction (les instructions dites x87), les instructions SSE (1,2, 3 et bientôt 4, anciennement MMX et 3DNow) sont celles des puces SIMD prévues à la base surtout pour le traitement multimédia mais qui sont aussi très adapté au calcul entier.

Et justement, le compilo ICC est capable d'employer les instructions les plus adaptées, là où un humain ne pourrait jamais choisir la meilleur instruction.

Si ça t'intéresse, je dois avoir quelque part un meilleur code que celui ci, que j'ai écris en C. Néanmoins, si tu as des gains de performances tel que tu le dit, je serais aussi très intéressé par voir comment tu code ça en VB6 (même si je n'utilise plus ce langage depuis des années).
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
64
je codes cela en VB6... ca ne rivalise bien sur pas avec de l'asm, encore moins avec du SSE (asm du coprocesseur de calcul) ...
mais bon, pour les bases, là, je suis satisfait.

je viens de passer ce soir de la base 100 à la base 10000 pour stocker les fragments en mémoire. Reste encore la multiplication, division, puissance et modulo pour que les besoins que j'ai soient satisfaits.
Messages postés
44
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
5 novembre 2007

Merci pour ton appréciation de ma source.

En quoi code tu ton programme ? qu'on puisse faire mieux que ce que j'ai fait à l'époque ça me semble très plausible (il n'y a aucune optimisation "intelligente" dans ce code), après tout, je l'ai écrit il y a des années de ça, mais le VB6 a quand même une vitesse d'exécution limité.
Afficher les 16 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.