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 :

Probleme de dépassement sur des calculs d'entiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 22
    Par défaut Probleme de dépassement sur des calculs d'entiers
    Bonjour,

    Voilà mon petit soucis :

    J'ai programmé des algorithmes me permettant de faire des calculs matriciels tels que calcul de déterminant, d'inversion de matrice, etc, sur un système embarqué (Microcontrôleur 68332).
    Au départ, tous les éléments de mes matrices étaient déclarés en float, je me suis aperçu que je n'étais pas très précis. J'ai voulu tout passer en entier. Une fois les modifications faites, j'ai pu voir que lors de certains calculs (comme le déterminant), je dépassais la capacité maximale de mes entiers c'est-à-dire 4 octects.

    Comme je n'ai rien trouvé dans les tutoriels et dans la FAQ (vraiment désolé s'il existe quelque chose ), je voulais savoir s'il était possible de faire une multiplication deux deux entiers de 4 octects chacun, dont le résultat serait codé sur 2 autres entiers de 4 octects chacun ???

    Merci de vos réponses !

  2. #2
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Il y a les long et les long long.
    Voir ce lien pour les différentes tailles de variable:
    http://c.developpez.com/faq/c/?page=...S_taille_types

  3. #3
    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 Sébastien THEVOT
    Bonjour,
    je voulais savoir s'il était possible de faire une multiplication deux deux entiers de 4 octects chacun, dont le résultat serait codé sur 2 autres entiers de 4 octects chacun ???
    Si ton compilateur le supporte (C99), il y a les [unsigned ]long long qui font au moins 8 octets...

    Sinon, il y a des bibliothèques tierces comme BigNum...

    Grillaid !

  4. #4
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 22
    Par défaut
    Merci de vos réponses,

    Mon compilateur n'accepte pas les long long. Je vais essayer d'inclure la bibliothèque BigNum.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Pour améliorer la précision par rapport aux float, essaye les double.

    Calcul de déterminant avec des entiers ? J'ai un petit doute, là.

    Même avec une librairie multi-précision, tu vas vite buter sur des problèmes... de précision : et les valeurs < 1 ?
    Si la librairie est bien faite, elles seront représentées par 2 nombres, numérateur + dénominateur, avec inflation de la taille des nombres utilisés, si on veut garder un précision suffisante.

    Avec, bien entendu, le problème corollaire de ce genre de calcul multi-précision : le temps de calcul n'a plus rien à voir avec celui obtenu avec les types de base.

    Au total, ça va donc vite devenir problèmatique sur un système embarqué, comme tu l'as précisé.

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Pour améliorer la précision par rapport aux float, essaye les double.
    Citation Envoyé par Sébastien THEVOT
    Au départ, tous les éléments de mes matrices étaient déclarés en float, je me suis aperçu que je n'étais pas très précis. J'ai voulu tout passer en entier.
    Calcul de déterminant avec des entiers ? J'ai un petit doute, là.
    Où est l'erreur ?

    Mon compilateur n'accepte pas les long long. Je vais essayer d'inclure la bibliothèque BigNum.
    Tu as GMP ou NTL aussi.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par PRomu@ld
    Où est l'erreur ?
    Il faut des matrices avec des coefficients très bien choisis pour avoir un déterminant entier.
    Cela n'arrive pas si souvent.

Discussions similaires

  1. Probleme d'aide sur des composants
    Par altaruk dans le forum Débuter
    Réponses: 0
    Dernier message: 01/07/2010, 11h59
  2. Probleme de syntaxe avec des calculs integrant des variables
    Par trigger00 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/06/2009, 09h20
  3. Caml win/ opérations sur des séquences d'entiers
    Par Sophie_26 dans le forum Caml
    Réponses: 29
    Dernier message: 02/05/2007, 20h25
  4. probleme de requetes sur des tables volumineuses
    Par abdoracle dans le forum Oracle
    Réponses: 6
    Dernier message: 14/06/2006, 15h41
  5. probleme d'heritage sur des chaines de caracteres
    Par pikiwiki dans le forum C++
    Réponses: 3
    Dernier message: 24/05/2006, 21h01

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