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

Delphi Discussion :

simplification calcul puissance et modulo


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut simplification calcul puissance et modulo
    Bonjour à tous, je vous expose mon problème :
    je souhaite effectuer le calcul suivant : (nbcode^E mod(N)) et le pb est que lorsque les valeurs de a ou b (integer) sont trop élevé Delphi sature.
    J'essaye donc de me servir des calculs de simplification des modulo
    Voila ce que j'ai programmé :

    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
       While E<>1 do
         begin
          If not Odd(E)
          Then
          Begin
           nbcode:=(puissance (Nbcode,2))mod N ;
           E:=E div 2;
          end
          Else
          Begin
           nbcode:=((puissance (Nbcode,2)mod  N)*aux)mod N;
           E:=E div 2;
          End;
     
         end;
    Mais malheureusement ça ne marche pas
    It doesn't work
    Aidez moi SVP
    merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    si tu veux gagner en puissance, il y l'assembleur !
    assembleur

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En faite c'est lorsque delphi fait Nbcode^E que ça sature.
    C'est pour ça que je me sert des formules du genre :
    (a*b)mod n = ((a mod n)*(b mod n)) mod n

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    D'abord méfie toi de ta condition de sortie (while e <>1) car (e=0 par exemple, ou e<0) fera planter ton appli.
    Ensuite que vaut Aux? (Valeur initiale de nbcode j'imagine)

    Ensuite, si nbcode ou N est supérieur à sqrt(2^32) tu auras toujours un problème de débordement,

    Quelle est la valeur de N?

    Sinon à quoi ca te sert de faire puissance (..,2)? alors que tu as dit toi eme que tu utilisait un algo de type (x mod n) * (x mod n)

    plutot un truc genre:

    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
     
    While E<>1 do
    begin
      nbCodeMod = nbcode mod N ;
      If not Odd(E)
      Then
      Begin
        nbcode:=(nbCodeMod * nbCodeMod )mod N ;
      end
      Else
      Begin
        nbcode:=(nbCodeMod * nbCodeMod *aux)mod N;
      End;
      E:=E div 2;
    end;
    PS utilise les balises [ CODE] [ /CODE ]
    Vive le Haut-Doubs Libre!

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup de t'être penché sur mon problème.
    Je vais maintenant essayer ce que tu me propose

  6. #6
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Pour repousser les limites, pense aussi au type Int64 (entier 64 bits) !

    Par ailleurs, si n n'est pas trop grand, il faudrait peut-être se pencher sur la fabrication en amont d'une table de multiplication modulo n... outre que celà repousse aussi la limite, puisqu'une telle table peut facilement se remplir par de simples additions, donc sans vraie limite supérieure, on pourrait avoir un gain de performance non négligeable puisqu'il n'y aurait plus d'appel aux routines de division du processeur !

Discussions similaires

  1. Problème de calcul puissance négative
    Par trentks95 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 04/04/2013, 18h23
  2. [z/OS] Calcul d'un MODULO
    Par Petit scarabé dans le forum Cobol
    Réponses: 7
    Dernier message: 04/06/2009, 12h30
  3. Simplification calcul indexage, vecteur
    Par Newenda dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/05/2009, 12h06
  4. Puissance et modulo
    Par Adrien93 dans le forum C
    Réponses: 20
    Dernier message: 06/11/2007, 13h10
  5. Calcul puissance bruit blanc
    Par Sakurazukamori dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 11/09/2007, 18h42

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