Retour à l'accueil
Accueil Aide Rechercher Calendrier Identifiez-vous Inscrivez-vous
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
18 Janvier 2018 à 21:02

Connexion avec identifiant, mot de passe et durée de la session
Règlement | Grades du forum | L'équipe de modération | Album photo | Chat
Rechercher:     avancée
Forums Zelda Solarus  |  Jeux amateurs  |  Programmation  |  Sujet: Limite Integrers en C... 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: Limite Integrers en C...  (Lu 2084 fois)
Gold-Link
Tokay
*
Hors ligne Hors ligne

Messages: 132



« le: 28 Janvier 2012 à 15:56 »

Hello!  sourire

Non cette fois-ci je ne viens pas pour demander une aide sur mon jeu. En fait j'aurai besoin de quelques conseils pour du C.
Alors voila, je suis en première et dans le cadre des Travaux Personnels Encadrés (TPE) avec mon groupe j'ai décidé de faire une expérience pour créer un logiciel, un logiciel codé en C. Bon j'ai pas mal de bases en C/C++ (plus en C) et le moteur du logiciel ne repose que sur des calculs assez simples, donc pas de grosses connaissances a avoir.
Or comme je viens de l'expliquer le logiciel effectue un calcul assez complexe afin de faire ressortir un nombre qui sera traité plus tard . Tout fonctionne très bien sauf que on va être amené a faire des calculs avec des chiffres grands...et c'est que ca coince car avec les Integrers (INT) on peut aller jusqu'a 2147483647 , après l'ordi me balance des chiffres au hazard quoi...et ca serait bien de contourner cette limite...

Je demandais donc si il y avait une ruse, ou une astuce à l'aide de tableaux  ou autres afin de traiter les variables longues en C.

Merci  sourire
Journalisée
Supersigo
Gerudo
*
Hors ligne Hors ligne

Messages: 2 117


You've met with a terrible fate, haven't you?


« Répondre #1 le: 28 Janvier 2012 à 16:17 »

J'ai une connaissance très basique de la programmation, mais il me semble qu'il existe effectivement des types de données qui permettent d'utiliser des variables plus longues en C/C++. Malheureusement, j'ignore lesquels.x)

Par contre, après une rapide recherche sur Google, j'ai trouvé ceci, peut-être que ça pourra t'aider. Sinon tu peux toujours chercher par toi-même, ça ne doit pas être si difficile que ça à trouver.^^

Bonne chance dans tes recherches et excuse-moi pour mon manque de connaissances en programmation, d'autres répondront sûrement mieux que moi. sourire
Journalisée
Gold-Link
Tokay
*
Hors ligne Hors ligne

Messages: 132



« Répondre #2 le: 28 Janvier 2012 à 17:04 »

J'avais effectivement trouvé un tableau récapitulatif dans le genre mais merci quand meme ^^
Sinon oui j'avais tenté de mettre des variables de type DOUBLE (qui son censés aller jusqu'a x10^308 mais le compilateur m'indique une erreur de type 'error C2177: constante trop grande' dans le débogueur alors que la variable ne fait que '100000000000000000000' [a titre de test] ce qui est inférieur a 10^308...  yeux fermés
J'ai beau chercher sur google , aucun résultat qui me convient...
Journalisée
BenObiWan
Ancien
Sheikah
*
Hors ligne Hors ligne

Messages: 3 374



« Répondre #3 le: 28 Janvier 2012 à 17:18 »

C'est ton '100000000000000000000' qui est trop grand, pas parce qu'il ne tient pas dans ta variable double, mais parce que le compilateur le traduit en entier avant de l'affecter.
Rajoute un .0 à la fin pour lui faire comprendre que ce n'est pas un entier. (enfin si mes souvenirs sont exacts)

En utilisant un double ou un float, tu risques de perdre en précision. Si la différence entre 100000000000000000000 et 100000000000000000001 est très importante pour ton programme n'utilise pas les nombres flottants. Si un long long ne te suffis pas, utilise une bibliothèque adaptée au traitement des grands nombre tel que http://gmplib.org/
Journalisée

Citation
Ash Nazg Durbatulùk, Ash Nazg Gimbatul,
Ash Nazg Thrakatulùk agh bruzum-ishi krimpatul.
The fellowship of the Ring - J.R.R. Tolkien
Calimero75
Mojo
*
Hors ligne Hors ligne

Messages: 28


« Répondre #4 le: 28 Janvier 2012 à 17:49 »

Je confirme ce que dit BenObiWan, les types flottants (float et double) ne sont pas adaptés au stockage de nombres entiers (tu pourrais avoir des surprises avec des tests d'égalité qui ne donnent pas le résultat attendu par exemple).

Sans aller jusqu'à gmp, tu dois sûrement pouvoir utiliser des entiers de 64 bits sur ta machine et ton compilateur, cela pourrait peut-être te suffire (c'est déjà bien gros) sourire Tu peux éventuellement te fier au tableau suivant sur wikipedia (en) : http://en.wikipedia.org/wiki/Integer_(computer_science)
Journalisée
Morwenn
Sheikah
*
Hors ligne Hors ligne

Messages: 3 265


And so what?


WWW
« Répondre #5 le: 28 Janvier 2012 à 20:08 »

Déjà, si tu veux être sûr de la taille des entiers que tu utilises, tu peux utiliser un int32_t ou un int64_t si ton ordinateur les supporte. Ce sont des entiers à taille fixe (respectivement 32 et 64 bits) qui se trouvent dans le header stdint.h dont tu pourras trouver une petite description (en anglais) en suivant ce lien. Ceci dit, ce header n'est standard qu'à partir de la norme C99. Donc, tu ne pourras être sûr de l'avoir qu'en compilant avec la norme C99 (Avec gcc, il faut ajouter l'option -std=c99 au compilateur). Il me semble qu'il ait été adapté en C++, mais je ne suis pas sûr qu'il soit standard.

Certains compilateurs fournissent des entiers de 128 ou 256 bits avec typiquement les types __int128 et __int256, mais il faut bien garder en tête que ce n'est pas portable. Il me semble cependant qu'ils existent avec certaines versions de GCC.

Sinon, si tu veux travailler avec des entiers infiniment grands, il existe des bibliothèques particulières comme GMP ou OpenSSL qui te fournissent ce genre de nombres.
Journalisée

Gold-Link
Tokay
*
Hors ligne Hors ligne

Messages: 132



« Répondre #6 le: 29 Janvier 2012 à 14:24 »

Merci de vos réponses. J'ai installé GMP a patir d'un tuto du site du zéro. Je pense toucher au but mais cette fois ci je rencontre une erreur de compilateur :

Citation
[Linker error] undefined reference to `std::ctype<char>::_M_widen_init() const'
 

A savoir que je suis sous Dev-Cpp...et toujours rien sur internet de bien convaincant, a savoir que je suis un peu un brêle ^^
Journalisée
Wouf
Hylien
*
Hors ligne Hors ligne

Messages: 1 116


C'est la faim !


« Répondre #7 le: 31 Janvier 2012 à 02:27 »

Es-tu sûr d'avoir bien lié ta bibliothèque au projet ? (en plus d'inclure les entêtes)
Regarde le paragraphe "compiler notre code" du tuto sourire

Il faut apparemment lier d'abord libgmpxx puis libgmp.
Journalisée

Marre des pavés ? Marchez dans la boue!
ハハ、あなたは私の罠に落ちた!
Gold-Link
Tokay
*
Hors ligne Hors ligne

Messages: 132



« Répondre #8 le: 31 Janvier 2012 à 17:42 »

Oui oui y a aucun soucis a ce niveau la, je pense pas que cela vienne de gmp...
Journalisée
Wouf
Hylien
*
Hors ligne Hors ligne

Messages: 1 116


C'est la faim !


« Répondre #9 le: 01 Février 2012 à 01:29 »

Peut être un problème de versions alors ...
As-tu bien compilé ta lib avec la même version du compilateur que tu utilises avec DevCpp ?
Journalisée

Marre des pavés ? Marchez dans la boue!
ハハ、あなたは私の罠に落ちた!
Gold-Link
Tokay
*
Hors ligne Hors ligne

Messages: 132



« Répondre #10 le: 03 Février 2012 à 00:14 »

Bon , j ai changé d'ordi par souci de mobilité et j ai du reinstaller tout les logiciels, et miracle! Ca fonctionne ! Enfin ^^
L erreur devait probablement venir de l installation de gmp, enfin merci a tous pour m avoir aidé a resoudre ce probleme et a avancer dans mon Tpe  sourire
Journalisée
Vauteck
Mojo
*
Hors ligne Hors ligne

Messages: 22


« Répondre #11 le: 03 Février 2012 à 01:22 »

Salut,

Content de savoir que tu as résolu ton problème !  super !
Juste une petite précision, tu disais dans ton premier post que c'était un projet en langage C, hors j'ai cru voir que GMP était une bibliothèque C++.
Je sais pas si çà a son importance, mais si c'est pour un cours, certains profs peuvent être pointilleux...  Mister Green
Journalisée
Gold-Link
Tokay
*
Hors ligne Hors ligne

Messages: 132



« Répondre #12 le: 03 Février 2012 à 19:38 »

Oui a la base c’était en C mais j'ai du effectivement passer au C++ afin d'obtenir ce que je voulais. Toutefois gmp fonctionne aussi avec des programmes en C mais je ne pense pas que tout ses fonctions également dans ce cas ^^
Journalisée
Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Programmation  |  Sujet: Limite Integrers en C...
Aller à:  

Propulsé par MySQL Propulsé par PHP Powered by SMF 1.1.20 | SMF © 2006, Simple Machines XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
www.zelda-solarus.com