begin process at 2010 03 15 20:25:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CLASSE INTEGER POUR GÉRER LES GRANDS ENTIERS

CLASSE INTEGER POUR GÉRER LES GRANDS ENTIERS


 Information sur la source

Note :
8,5 / 10 - par 4 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :grand, entier, bigint, biginteger Niveau :Débutant Date de création :30/12/2003 Date de mise à jour :05/08/2005 18:03:53 Vu / téléchargé :3 467 / 365

Auteur : vecchio56

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


 Description

Classe Integer pour gérer les grans entiers avec a mon avis des performances acceptables et a priori portable à 100%.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 août 2005 18:03:54 :
Ajout de la fonction Sqrt

 Sources du même auteur

Source avec Zip COLORATION DE CODE C/C++ POUR LE FORUM DE CPPFRANCE
Source avec Zip SUPPRIMER LES # AJOUTÉS LORS D'UN COPIER/COLLER
Source avec Zip Source avec une capture CRÉER UN FICHIER ISO À PARTIR D'UN RÉPERTOIRE (WIN32)
Source avec Zip Source avec une capture EXPLORATEUR DE FICHIERS ISO
Source avec Zip Source avec une capture CHARGER UNE POLICE DEPUIS UN FICHIER OU UNE RESSOURCE (WIN32...

 Sources de la même categorie

Source .NET (Dotnet) CALCULE LOG(X) par tagtog
Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec une capture CALCUL DE VARIANCE par Minilogus
Source avec une capture GÉNÉRATEUR DE CLÉS SUR 26 DIGITS AU FORMAT HEXADÉCIMAL par besilent
Source avec Zip Source avec une capture ALGORITHME DE CRYPTAGE/DECRYPTAGE par besilent

 Sources en rapport avec celle ci

ITOA FAIT MASION: COVERSION ENTIER 32 BIT NON SIGNE VERS CHA... par xtremejames183
Source avec Zip ENTIER 256 BITS ET + par GordoCabron
TRI CROISSANT ET DÉCROISSANT D'ENTIERS par mwalimu
SUITE DE FIBONACCI par Rmadmann007
Source avec Zip AFFICHER UN ENTIER UNSIGNED SOUS LA FORME DE BITS par Jackboy

Commentaires et avis

Commentaire de BinOff le 04/01/2004 11:30:19

excelent...

Commentaire de BlackGoddess le 06/01/2004 09:56:27

joli code :)

juste une petite chose : les classes d'exception devraient dériver de std::exception pour plus de sécurité.

Commentaire de cosmobob le 08/03/2004 01:25:59

salut. ya un bug ds ta fonction de division (ou ptet ca vient d'ailleurs...)
avec ce main la:
#include "Integer.h"

int main()
{
try
{
Integer a = Integer("30");
Integer b = Integer("19");
cout << "a = " << a << endl;
cout << "b = " << b << endl << endl;
cout << "a + b = " << a + b << endl;
cout << "a - b = " << a - b << endl;
cout << "a * b = " << a * b << endl;
cout << "a / b = " << a / b << endl;
cout << "a! = " << fact(a) << endl;
cout << "b! = " << fact(b) << endl;
      cout << "19! = " << fact(Integer("19")) << endl;
      cout << "a! / b! = " << endl;
      cout << fact(a) / fact(b) << endl;
      cout << "salut ;)" << endl;
}
catch(Error& e)
{
cout << "Erreur: " << e.GetMessage();
}
return 0;
}

ca n'arrive pa a faire la division.

Commentaire de cosmobob le 08/03/2004 01:27:52

ne pas arriver a faire la division = ca bloque, donc on dirait que ca boucle a l'infini.

Commentaire de vecchio56 le 11/03/2004 00:38:20 administrateur CS

ca y est j'ai résolu le problème
et merci infiniment a toi qui m'a mis 1/10

Commentaire de newic500 le 26/04/2004 21:24:44

#include "Integer.h"

//calcule (value^e)%n
Integer powermod(Integer value, Integer e , Integer n)
{
Integer answer;
bool flag = true;

if (e%2 == 0)
answer = 1;
else
answer = value;
do
{
e = e/2;
if (e == 0)
flag = false;
else
{
value = (value*value)%n;

if (e%2 != 0)
answer = (answer*value)%n;
}

}while(flag);

return answer;
}

int main()
{
try
{
Integer e = Integer("811962581");
Integer d = Integer("3894647741");
Integer n =  Integer("4080527237");

Integer answer = powermod(1, e, n);
cout << answer << endl;
answer = powermod(answer, d, n);
cout << answer << endl;

}
catch(Error& e)
{
cout << "Erreur: " << e.GetMessage();
}
return 0;
}

Ce code la fonctionne pour les petits nombres !
Vous reconnaitrez un algo RSA avec ses clefs e,d,n !
Mais pour les grands nombres, c'est dead :(

Sinon il y a un bug pour la fonciton puissance (tu as oublié un cas ou la puissance est nulle ou egale a un... Je me souviens plus lequel ! En tout cas merci de developper de tels outils !

Commentaire de vecchio56 le 27/04/2004 18:59:09 administrateur CS

Le problème de puissances est réglé
Pour l'autre problème, tu peux monter un cas ou ca foire?

Commentaire de clem0338 le 04/08/2005 10:50:37

Yo, vecchio,

ca vas ?

Je voulais savoir s'il y avais une evolution possible de ce code pour gerer la racine carré de l'integer.

Merci

Commentaire de vecchio56 le 04/08/2005 17:47:32 administrateur CS

Bien sur, si tu me donne un algo. Je sais plus trop comment on calcule la recine carrée. Je vais chercher

Commentaire de vecchio56 le 04/08/2005 17:50:31 administrateur CS

Deja faut voir ce que tu veux en résultat: la partie entiere de la racine carrée, sous forme de Integer, ou bien un float?

Commentaire de clem0338 le 05/08/2005 09:23:09

Yo, integer me semble parfait, si tu veut, voici un algo parmis d'autre:
type Racine( type x )
type i = 1;
type n = 0;

while ( i < x ) {
x -= i;
i += 2;
n++;
};

return ( n );
}

@+

Commentaire de vecchio56 le 05/08/2005 18:04:33 administrateur CS

J'ai ajouté une focntion Sqrt, mais avec un autre algo, plus rapide

Commentaire de clem0338 le 08/08/2005 09:11:05

oki, seigneur, je te remercie infiniment

Commentaire de Sparow le 30/03/2006 01:05:22

Vraiment pas mal ! Mais j'ai tjrs pas compris pourquoi tu limites la valeur des entiers de ta sdt::list<int> à 10000 (plus de la moitié des bits ne servent à rien... 10000 étant codé sur 14 bits alors qu'un entier en contient 32). C'est une question de vitesse? Où alors une question de portabilité pour les compilos à entiers de 16 bits? (anciennes versions de borland par exemple...)

Commentaire de vecchio56 le 31/03/2006 17:33:34 administrateur CS

Problème de multiplication en fait: si on fait 10000000 par exemple, on sera obligé d'utiliser des entiers 64 bits pour faire tenir le résultat intermédiaire. Alors que 10000*10000 tient bien sur 32 bits
Si je me souviens bien, c'est quand même un perte de vitesse non négligeable

Commentaire de skone007 le 20/07/2007 15:23:02

J'ai un petit problème avec la classe je est utilisé pour calculer la suite de fibonacci avec la formule explicite voilà mon code :
Integer fib(int n)
{
    Integer ret;
    try
    {
        Integer sqrt5 = Integer("5");
        sqrt5 = sqrt5.Sqrt(Integer("5"));
        Integer invsqrt5 = Integer("1") / sqrt5;

        Integer phi = (Integer("1") + sqrt5)/Integer("2");
        phi = pow(phi, n);
        Integer phi2 = (Integer("1") - sqrt5)/Integer("2");
        phi2 = pow(phi2, n);
        ret = invsqrt5 * (phi - phi2);
    }
    catch(Error& e)
    {
        cout << "Erreur: " << e.GetMessage();
    }

    return ret;
}

et dans mon main
while(a != 10)
        {
            cout << fib(a).to_string() << endl;
            cout << fib(a).to_int() << endl;
            cout << fib(a) << endl;
            a++;
        }

mais rien j'ai affichié
0
0
0_
0
0
0_
0
0
0_...

Commentaire de vecchio56 le 20/07/2007 21:08:19 administrateur CS

Comme son nom l'indique, mon code gère les entiers.

sqrt5 = sqrt5.Sqrt(Integer("5")); vaut donc 2
et Integer invsqrt5 = Integer("1") / sqrt5; vaut 0

ce qui explique tes résultats

Commentaire de skone007 le 21/07/2007 22:23:07

oupss en effet mais la sorti de ma fonction est un entier comment gérer as tu une solution ? ret est un entier

Commentaire de skone007 le 30/01/2008 16:18:22

Il y a un bug quand je fais Integer("2971215073") / Integer("27011") Donc quand je fais aussi Integer("2971215073") % Integer("27011"). L'opération ne ce fait jamais

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Manipulation de grand tableaux d'entier [ par oistrakh ] Bonjour,Pour acceler un programme VBA, j'ai introduit une dll dans laquelle notammentje cherche a remplir des tableaux tres grand ( j'aimerais atteind Fichier texte écrit avec la fonction fprintf [ par dayvid75014 ] Bonjour à tous,Pendant l'exécution de mon programme, je viens récupérer des informations et les écrire dans un fichier texte. Cependant, lorsque je re #pgramma comment et DLL [ par loicus ] Salut,J'ai juste une petite question très simple.Mon projet utilise un grand nombre de librairie.  Ce grand nombre de fichier fait qu'il devient relat Reconnaitre tel ou tel variable [ par Kelm0 ] Bonjour, ma question est de savoir si il y a un moyen de savoir si une variable d'un type t est un charactère, un entier, un float, un pointeur, etc, tableau [ par MBALHOUSSE ] bonjour 1) au fait, je veux programmer une fonction en C qui renvoie une valeur entier pour chaque motcad j'ai besoin d'un tableau de caractere comme Parité d'un entier [ par Kelm0 ] Bonjour, il existe une fonction, ou sinon un algorithme d'une fonction, permettant de vérifier si la variable var est pair ou impair ? tableau d'entier en chaine [ par bosmal ] bonjourje voudrais savoir comment convertir un tableau d'entier en une chaine de caractere.ex:int wd[8192]les données a l'interieur du tableau doivent convertir tableau d'entier en chaine de caractere [ par bosmal ] bonjour, comment feriez vous pour transformer un tableau d'entier (int tab[8192]) en une chaine de caractere. ou autrement y a t il une fonction qui p Mémoriser une chaine de valeur entier répétitif dans un tableau [ par moberol ] Bonjour à tousje suis débutant en C++ si quelqu'un peux m'aider je dois memoriser plusieurs entiers 1,32,36,46,5,60,63,87,97......132 dans un structur format de nombres entier [ par cre31400 ] Salut, Pour mon programme j'ai besoin d'avoir des nombres à deux chiffres, par exemple si j'obtiens  2 il me le faudrait sous la forme 02 . Existe-t'i


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales