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 :

Prog µC 8bits : division sur de grands nombres


Sujet :

C

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut Prog µC 8bits : division sur de grands nombres
    bonjour,

    J'ai besoin de faire une division sur un nombre non-signé de 48bits. Le problème est que le µC n'a pas l'air de savoir gérer nativement cette taille de variable : comment faire ?
    j'ai besoin de faire une division par une constante

    Comment fait-on pour définir un type de 48bits ?

    Je travaille sur un PIC18F.

  2. #2
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Emcy Voir le message
    J'ai besoin de faire une division sur un nombre non-signé de 48bits. Le problème est que le µC n'a pas l'air de savoir gérer nativement cette taille de variable : comment faire ?
    Tu es dans la m...

    Non seulement un µC 8-bit ne sait pas gérer un tel nombre, mais même la bibliothèque du compilateur C n'ira probablement pas au-dela d'un long de 32-bit, à moins qu'il existe une version C99 de ton compilateur qui supporterait les long long...

    Je confirme : Compilateur Hi-Tech pour PIC 18 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Table 3.1: Basic data types
    Type           Size (bits) Arithmetic Type
    bit            1           unsigned integer
    char           8           signed or unsigned integer
    unsigned char  8           unsigned integer
    short          16          signed integer
    unsigned short 16          unsigned integer
    int            16          signed integer
    unsigned int   16          unsigned integer
    long           32          signed integer
    unsigned long  32          unsigned integer
    float          24          real
    double         24 or 32    real

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    y a pas moyen de contourner le problème ? ... je croyais qu'on pouvais tout faire en C...

    Remarque : a priori le compilo supporte le type long long mais il ne sait pas faire d'opération dessus (car dans un projet d'exemple j'ai vu ce type mais dès que je fais des opérations dessus ça ne fonctionne pas)

  4. #4
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Emcy Voir le message
    y a pas moyen de contourner le problème ? ... je croyais qu'on pouvais tout faire en C...
    Oui, bien sûr, on peut coder cette opération en 64-bit (personnellement, je ne sais pas le faire, mais c'est certainement possible). Il ne faut pas s'attendre à des performances mémorables.

    A traduire en C :
    http://www.df.lth.se/~john_e/gems/gem002a.html
    Algo:
    http://www.developpez.net/forums/sho...40&postcount=7
    etc.

    Je ne vais pas t'apprendre à te servir de ...

    Est-ce que la précision d'un double ne serait pas suffisante pour tes calculs ?

    Remarque : a priori le compilo supporte le type long long mais il ne sait pas faire d'opération dessus (car dans un projet d'exemple j'ai vu ce type mais dès que je fais des opérations dessus ça ne fonctionne pas)
    Pour que les opérations sur long long fonctionnent, il faut 2 conditions :
    • Que le compilateur supporte l'opération
    • Que la bibliothèque supporte l'opération

    Quel compilateur utilises-tu ? (Nom et version précise).

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Peut être qu'en postant dans le forum algorithme, tu trouveras une réponse (http://www.developpez.net/forums/forumdisplay.php?f=60). Après tout, tu ne cherches qu'un algo de division d'un nombre 48 bits par un autre nombre (sur 48 bits ?) tout cela en utilisant que des opérations sur 8 bits. Il existe peut être d'autres algorithmes qu'Euclide.

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Peut être qu'en postant dans le forum algorithme, tu trouveras une réponse (http://www.developpez.net/forums/forumdisplay.php?f=60). Après tout, tu ne cherches qu'un algo de division d'un nombre 48 bits par un autre nombre (sur 48 bits ?) tout cela en utilisant que des opérations sur 8 bits. Il existe peut être d'autres algorithmes qu'Euclide.
    => c'est pas bête mais c'est aux admins de voir s'ils veulent bien déplacer le post... (si j'ouvre une autre poste je risque de me faire fouetter ...)

    pour le compilo c'est mcc18 version 3.14 :
    http://www.microchip.com/stellent/id...&redirects=c18

    Pour que les opérations sur long long fonctionnent, il faut 2 conditions :

    * Que le compilateur supporte l'opération
    * Que la bibliothèque supporte l'opération
    => si la bibliothèque ne supporte pas l'opération, ne devrait-il pas y avoir un message d'erreur ?

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Citation Envoyé par Emcy Voir le message
    => c'est pas bête mais c'est aux admins de voir s'ils veulent bien déplacer le post... (si j'ouvre une autre poste je risque de me faire fouetter ...)
    Non, tu fermes ce thread (Résolu) et tu réouvres dans Algorithmes en reformulant ton problème. Je ne pense pas qu'il y ait matière à récrimination. Tu as ouvert un premier thread qui t'a permis d'affiner ton problème sans pour autant le résoudre, c'est pourquoi tu en ouvres un second.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Division sur de Grands entiers
    Par mawguai dans le forum Mathématiques
    Réponses: 4
    Dernier message: 06/06/2008, 22h08
  2. Opération sur des grands nombres
    Par Melem dans le forum Contribuez
    Réponses: 3
    Dernier message: 11/01/2008, 14h11
  3. Modulos sur des grands nombres
    Par DjPoke dans le forum Mathématiques
    Réponses: 2
    Dernier message: 07/08/2007, 16h32
  4. Réponses: 8
    Dernier message: 21/11/2005, 18h18
  5. requete sql sur un grand nombre d enregistrement
    Par marielaure dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/08/2004, 12h53

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