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 :

Puissance et modulo


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 34
    Par défaut Puissance et modulo
    Bonjour,

    Je cherche à calculer le modulo d'une puissance. Je me heurte au problème du type avec la fonction pow().

    J'ai beau cherché, mon niveau ne m'a pas permis jusque là à me sortir d'affaire.

    Quelqu'un saurait comment faire ce type d'opération :

    long C = pow(x,y) % n ?

    où x, y et n sont des entiers.

    Merci beaucoup pour votre aide !

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long C = lrint(pow((double)x,(double)y)) % n;

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    désolé mais la fonction lrint est uniquement acceptée/définie dans C99..

    En C non-C99 (un programme C portable n'incluera pas des fonctions spécifiques C99), on peut se servir de la fonction modf :

    http://man.developpez.com/man3/modf.3.php

    http://www.linux-kheops.com/doc/man/...n3/modf.3.html

    et après en tirer le modulo par %

    ou bien directement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C = (long)(round(x)) % n
    ou si x dépasse les capacités d'un long, faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    double d=1.0 ;
    long C ;
     
    while ( (d*n) < x )
         d = d + 1.0 ;
     
    C = (d*n - x);

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    désolé mais la fonction lrint est uniquement acceptée/définie dans C99..
    un programme C portable n'incluera pas des fonctions spécifiques C99.
    La norme C99 comme son nom l'indique date de 1999, on est en 2007 faut arrêter maintenant avec ça et se mettre à la page. C'est une ironie de dire qu'un programme qui respecte la norme n'est pas portable...

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    La norme C99 comme son nom l'indique date de 1999, on est en 2007 faut arrêter maintenant avec ça et se mettre à la page. C'est une ironie de dire qu'un programme qui respecte la norme n'est pas portable...
    Ouais mais bon gcc ne respecte pas encore entièrement la norme C99 donc on a beau être en 2007 si ton compilateur ne supporte pas entièrement cette norme autant rester avec la norme de 89 qui elle est supportée par gcc (entre autres).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 34
    Par défaut
    Ne vous battez pas pour moi

    J'essairai ce soir. Quelle est la solution la plus recommandable ?

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    La norme C99 comme son nom l'indique date de 1999, on est en 2007 faut arrêter maintenant avec ça et se mettre à la page. C'est une ironie de dire qu'un programme qui respecte la norme n'est pas portable...
    C'est ironique mais c'est une realite. Peu de compilateurs implementent C99 en entier (Comeau est sans doute le plus complet). gcc supporte la majeure partie des nouveautes, mais d'autres ont le statut "broken", ce qui n'est pas tres rassurant. Borland et Microsoft ont choisi de ne pas implementer C99 et mettent l'accent sur le C++.
    S'il existe une solution C90 equivalente, il est donc preferable de ne pas utiliser C99.

  8. #8
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Pour moi ça n'est pas logique, mon compilateur implémente C99, dans les autres langages, quand une nouvelle version apparaît les gens ne mettent pas 20 ans pour s'y mettrent, le C a déjà assez mauvaise réputation comme ça, on dis que c'est un langage dépassé, on pourrait prétexté que la dernière révision date de 2005 mais vous vous bloquez sur 1989, et toutes les améliorations et nouvelles fonctionnalités passent aux oubliettes...

Discussions similaires

  1. calcul du modulo ou puissance d'un nombre
    Par tcheck_vi dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2009, 07h54
  2. Réponses: 1
    Dernier message: 05/04/2009, 12h29
  3. simplification calcul puissance et modulo
    Par Gotman-B dans le forum Delphi
    Réponses: 5
    Dernier message: 23/05/2007, 18h23
  4. x² et puissance de x par récurrence
    Par olivieram dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 15/12/2002, 23h59
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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