Forum INFOMATH
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

X puissance n

3 participants

Aller en bas

X puissance n Empty X puissance n

Message par manianis Lun 15 Oct - 18:17

Donner la méthode la plus optimisée pour calculer X^n. (x est un réel non nul et n est un entier relatif quelconque).

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6256
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
X puissance n Left_bar_bleue999/1000X puissance n Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

X puissance n Empty Re: X puissance n

Message par Napoléon Mar 16 Oct - 1:30

manianis a écrit:Donner la méthode la plus optimisée pour calculer X^n. (x est un réel non nul et n est un entier relatif quelconque).

Habituellement, la méthode 1ère méthode qui vient à l'esprit nécessite |n| multiplication(s).

Code:
expo := 1;
pour i de 1 à |n| répéter
      expo := expo * X;

Sauf que, à mon avis, on peut diminuer le nombre d'opérations de multiplications.

Arrow Exemple 1
on peut optenir X^9 en multipliant au fur et mesure les petits exposants qu'on est entrain de construire... en effet:

Calculons X^2
Au lieu de multiplier le résultat par X pour avoir X^3, on l'élève au carré.
On obtient (X^2)^2 = X^4.
On réitère tant que l'exposant obtenu est inférieur à l'exposant demandé.
Dans notre cas, X^9 = [((X^2)^2)^2]*2
Ca rappèle l'écriture de 9 dans la base 2 qui est 9 = 2^3+1.

Donc, avec la méthode naïve, on fait exactement 8 multiplications pour avoir X^9.
Avec la deuxièmen méthode, on fait uniquement 4 multiplications.


Arrow Exemple 2Combien d'opérations de multiplications pour calculer X^256 ?
Avec la méthode naïve, il faut 255 multiplications.
Or en remarquant que 256 = 2^8, on peut écrire:
Code:
X^256 = 2^[2^8] = 2^(2*2*....*2) = (((((((2^2)^2)^2)^2)^2)^2)^2)^2
D'où, il suffit de faire 8 multiplications (au lieu de 255!!)

A mon avis, la question la plus judicieuse c'est à quelle base on doit écrire l'exposant "n" pour avoir le minimum de multiplications possible confused affraid


ohh: j'espère que j'ai pas commis d'erreurs dans ce que j'ai écrit...
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7873
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
X puissance n Left_bar_bleue999/1000X puissance n Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

X puissance n Empty Re: X puissance n

Message par Napoléon Mar 16 Oct - 1:35

manianis a écrit:Donner la méthode la plus optimisée pour calculer X^n. (x est un réel non nul et n est un entier relatif quelconque).

Vraiment bravo pour le topic. Ca me donne l'idée de poster d'autres topics du style:
Quelle est la meilleure méthode pour calculer ....?


Ca révise les notions de base de la complexité.
C'est mon tour, la prochaine fois je posterai un sujet du même genre que le tien

scratch
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7873
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
X puissance n Left_bar_bleue999/1000X puissance n Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

X puissance n Empty Re: X puissance n

Message par manianis Mar 16 Oct - 12:45

Merci, j'avais travaillé avec la méthode que tu avait indiqué et je cherche une plus optimisée.
Par exemple :
x^15 = x^8.x^4.x^2.x
d'ou :
Code:
function puissance(x : real ; a : integer):real;
var
    i : integer;
    pu, p : real;
    neg : boolean;
begin
    pu := 1.0;
    p := x;
   
    neg := (a < 0);
   
    while (a <> 0) do
    begin
        if (a mod 2 <> 0) then pu := pu * p;
        p := p * p;
        a := a div 2;
    end;
   
    if neg then puissance := 1/pu else puissance :=pu;
end;

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 6256
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
X puissance n Left_bar_bleue999/1000X puissance n Empty_bar_bleue  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

X puissance n Empty Re: X puissance n

Message par Napoléon Mar 16 Oct - 14:32

manianis a écrit:Merci, j'avais travaillé avec la méthode que tu avait indiqué et je cherche une plus optimisée.
Par exemple :
x^15 = x^8.x^4.x^2.x
d'ou :
Code:
function puissance(x : real ; a : integer):real;
var
    i : integer;
    pu, p : real;
    neg : boolean;
begin
    pu := 1.0;
    p := x;
   
    neg := (a < 0);
   
    while (a <> 0) do
    begin
        if (a mod 2 <> 0) then pu := pu * p;
        p := p * p;
        a := a div 2;
    end;
   
    if neg then puissance := 1/pu else puissance :=pu;
end;

C'est exactement ça. 256 = 2^8 (en binaire, 256=10000000)
Tu as pris X^15, 15=2^3+2^2+2+1 (en binaire, 15=1111)

Je me suis posé la question: est-t-il intéressant de travailler dans une autre base (3, 5...). Est-ce qu'on gagne klk chose surtout que parler de "la méthode la plus optimisée" n'est pas toujours évident...

scratch
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7873
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
X puissance n Left_bar_bleue999/1000X puissance n Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

X puissance n Empty Re: X puissance n

Message par Napoléon Mar 16 Oct - 14:38

Je me suis rappelé mnt qu'il y a des algorithmes d'Exponentiation Rapide ou quelque chose pareille... je vais revoir les références... scratch J'ai rencontré ça lorsque j'ai travaillé sur l'algorithme de cryptographie RSA qui se base sur l'exponentiation de grands nombres contenant parfois plus que 100 chiffres...
exmple:
Calculer
1217787912111777771112233778712797979^1221777117793

affraid c'est passionnant à voir comme solution.
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7873
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
X puissance n Left_bar_bleue999/1000X puissance n Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

X puissance n Empty Re: X puissance n

Message par methodiX Mar 16 Oct - 20:16

manianis a écrit:Merci, j'avais travaillé avec la méthode que tu avait indiqué et je cherche une plus optimisée.
Par exemple :
x^15 = x^8.x^4.x^2.x
d'ou :
Code:
function puissance(x : real ; a : integer):real;
var
    i : integer;
    pu, p : real;
    neg : boolean;
begin
    pu := 1.0;
    p := x;
    neg := (a < 0);
    while (a <> 0) do
    begin
        if (a mod 2 <> 0) then pu := pu * p;
        p := p * p;
        a := a div 2;
    end;
    if neg then puissance := 1/pu else puissance :=pu;
end;

PEUT-ON CALCULER LE NOMBRE MOYEN D'OPERATIONS (multiplications) REQUISES PAR CET ALGORITHME ???

X puissance n 848511
methodiX
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7255
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
X puissance n Left_bar_bleue1000/1000X puissance n Empty_bar_bleue  (1000/1000)

Revenir en haut Aller en bas

X puissance n Empty Re: X puissance n

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum