IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Stocker des grands nombres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 56
    Par défaut Stocker des grands nombres
    Bonjour à tous,
    Je dois réaliser une calculatrice qui travaille sur des grands nombres (de l'ordre de mille chiffres), et je ne sais pas trop comment stocker ces nombres en mémoires, et je voulais savoir si certains d'entre vous avaient une idée sur le meilleur moyen pour stocker de tels nombres, pour pouvoir les utiliser facilement par la suite (multiples opérations).
    Merci d'avance.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Une solution serait d'utiliser gmp qui permet de travailler sur des entiers de taille arbitraire.

    http://gmplib.org/ en particulier : http://gmplib.org/manual/Integer-Fun...eger-Functions.

    EDIT : exemple simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
    /* utilisation de lib gmp */
    #include <gmp.h>
     
    int main(void)
    {
        char result[256];
     
        /* trois entiers */
        int int32[3];
     
        /* trois entier gmp */
        mpz_t integ[3];
     
        /* initialisation des entiers gmp */
        mpz_init(integ[0]);
        mpz_init(integ[1]);
        mpz_init(integ[2]);
     
        /* assignation des entiers */
        int32[0] = 3000000;
        int32[1] = 10000;
     
        /* assignation des entiers gmp */
        mpz_set_str(integ[0], "3000000", 10);
        mpz_set_str(integ[1], "10000", 10);
     
        /* multiplication */
        int32[2] = int32[0] * int32[1];
     
        /* multiplication gmp */
        mpz_mul(integ[2], integ[0], integ[1]);
     
        /* affichage du resultat */
        printf("result: %d\n", int32[2]);
     
        /* affichage du resultat gmp */
        if (NULL != mpz_get_str(result, 10, integ[2])) {
            printf("result (gmp): %s\n", result);
        }
     
        /* nettoyage gmp */
        mpz_clear(integ[0]);
        mpz_clear(integ[1]);
        mpz_clear(integ[2]);
     
        return 0;
    }
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    result: -64771072
    result (gmp): 30000000000
    Dernière modification par Invité(e) ; 23/12/2008 à 17h40. Motif: Ajout d'exemple

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    sinon sans bibliotheque supplementaire, from scratch, tu peux stocker tes nombres sous formes de string et coder des fonctions specials qui gere les operations de 2 strings qui represente un nombre etc.
    Avec ce systeme tu peux faire un calculateur de nombre bcp plus grand que si tu les stocks sous forme de nombre directement.

    exemple :
    tu as le nombre 123456789123456789 tu le lis au format string
    idem avec 987654321987654321

    tu as donc 2 string qui represente des nombres, imaginons une addition, tu sais que le caractere '9' et le caractere '1' donne 0 + 1 au chiffre suivant etc. Apres il faut optimiser tes fonctions pour les multiplications/divisions etc.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Hai,
    Citation Envoyé par oniric Voir le message
    sinon sans bibliotheque supplementaire, from scratch, tu peux stocker tes nombres sous formes de string et coder des fonctions specials qui gere les operations de 2 strings qui represente un nombre etc.
    Avec ce systeme tu peux faire un calculateur de nombre bcp plus grand que si tu les stocks sous forme de nombre directement.

    exemple :
    tu as le nombre 123456789123456789 tu le lis au format string
    idem avec 987654321987654321

    tu as donc 2 string qui represente des nombres, imaginons une addition, tu sais que le caractere '9' et le caractere '1' donne 0 + 1 au chiffre suivant etc. Apres il faut optimiser tes fonctions pour les multiplications/divisions etc.
    Pour optimiser, certainement pas en stockant, calculant avec des caractères.

    C'est un sujet récurrent, il faut chercher un peu sur le forum.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 56
    Par défaut
    On m'a déjà parler de gmp mais le problème c'est que c'est dans un cadre scolaire, donc je dois tout faire moi même sans aucune bibliothèque (à part les standards). Mais je vais regarder gmp, dois y avoir moyen de comprendre comment c'est coder (voir d'avoir les sources ?)?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par TrexXx Voir le message
    On m'a déjà parler de gmp mais le problème c'est que c'est dans un cadre scolaire, donc je dois tout faire moi même sans aucune bibliothèque (à part les standards). Mais je vais regarder gmp, dois y avoir moyen de comprendre comment c'est coder (voir d'avoir les sources ?)?
    Je ne suis pas sûr qu'un programmeur confirmé y comprenne quelque chose, alors un débutant...

    Les source, c'est pas le manuel de conception. Et ça, ce n'est jamais publié. La publication des sources est une vaste fumisterie markéting qui fait croire que la technologie est accessible (free, c'est à dire 'libre' !).

    Je peux sans gros problèmes, écrire du code source source fonctionnel tellement illisible que même moi, je ne saurais ni le lire ni le dépanner...

Discussions similaires

  1. Modulos sur des grands nombres
    Par DjPoke dans le forum Mathématiques
    Réponses: 2
    Dernier message: 07/08/2007, 15h32
  2. Type PostgreSQL pour stocker des grands nombres
    Par K-Kaï dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/06/2006, 20h26
  3. manipuler des grands nombres
    Par Hypnocrate dans le forum C
    Réponses: 3
    Dernier message: 25/03/2006, 22h27
  4. Réponses: 3
    Dernier message: 10/03/2006, 16h41
  5. Réponses: 3
    Dernier message: 22/05/2005, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo