Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3085 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Comment faire x^n ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Comment faire x^n ?

n°920485
Kalimuxo
!
Posté le 11-12-2004 à 16:22:52  profilanswer
 

Mais attention, sans utiliser de multiplication (sinon c'est pas drôle). Juste des additions.
 
Je sais que c'est con mais je galère .....  
 
Merci par avance de votre aide ^^


---------------
/* Signature */
mood
Publicité
Posté le 11-12-2004 à 16:22:52  profilanswer
 

n°920488
Kalimuxo
!
Posté le 11-12-2004 à 16:25:09  profilanswer
 

Si vous avez un bout de code en C ça irait ...


---------------
/* Signature */
n°920493
Taz
bisounours-codeur
Posté le 11-12-2004 à 16:41:42  profilanswer
 

pow

n°920498
Chronoklaz​m
Posté le 11-12-2004 à 16:55:20  profilanswer
 

Donc x^n = tu fait une boucle qui fait n fois l'operation (X + X + ... (x fois, une boucle quoi) ... + X)
 
C'est ca non ?


Message édité par Chronoklazm le 11-12-2004 à 16:55:34
n°920502
Kalimuxo
!
Posté le 11-12-2004 à 17:05:00  profilanswer
 

heu ....


---------------
/* Signature */
n°920515
Ayuget
R.oger
Posté le 11-12-2004 à 17:33:08  profilanswer
 

xPuissanceN = exp(n*ln(x))
 
De rien :jap:

n°920521
pascal_
Posté le 11-12-2004 à 17:46:28  profilanswer
 

Ayuget a écrit :

xPuissanceN = exp(n*ln(x))
 
De rien :jap:


 
Il y a une multiplication  :D

n°920609
blueberry7​6
Posté le 11-12-2004 à 19:38:14  profilanswer
 

Chronoklazm a écrit :

Donc x^n = tu fait une boucle qui fait n fois l'operation (X + X + ... (x fois, une boucle quoi) ... + X)
 
C'est ca non ?


 
non :pfff:  
la tu fais n*x

n°920611
blueberry7​6
Posté le 11-12-2004 à 19:38:34  profilanswer
 

mais je suis curieux de savoir comment on fais

n°920616
Kalimuxo
!
Posté le 11-12-2004 à 19:46:21  profilanswer
 

Juste des additions ! Pas de fonctions transcandantes rien d'autre que des ADDITIONS ^^


---------------
/* Signature */
mood
Publicité
Posté le 11-12-2004 à 19:46:21  profilanswer
 

n°920630
HelloWorld
Salut tout le monde!
Posté le 11-12-2004 à 20:03:40  profilanswer
 

Ca revient à coder la multiplication avec des additions.
Multiplier x par x, c'est ajouter x fois x à un total.

Code :
  1. int pow( int X, int N )
  2. {
  3.     int total = X;
  4.     int n;
  5.     int i;
  6.     for ( n = 1; n < N; ++n )
  7.     {
  8.         /* multiplier total par X */
  9.         int subtotal = total;       
  10.         for ( i = 1; i < X; ++i )
  11.         {
  12.             subtotal += total;
  13.         };
  14.         total = subtotal;
  15.     }
  16.     return total;
  17. }


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°920657
Chronoklaz​m
Posté le 11-12-2004 à 21:29:44  profilanswer
 

blueberry76 => j'ai dis "n fois" en sous entendant que ce serais n passage dans une boucle ou l'on fait l'operation que j'ai mis entre parenteses, donc aucune multiplication :D
 
Bein c'est bien ce que je disais (une double boucle) !


Message édité par Chronoklazm le 11-12-2004 à 21:32:51
n°920680
matafan
Posté le 11-12-2004 à 22:17:20  profilanswer
 

Y'a quand même moyen de limiter le nombre d'additions nécessaires pour calculer une multiplication. Par exemple si tu veux calculer x*5, il suffit de 3 additions : x2 = x+x, x4 = x2+x2, x5 = x4 + x.
 
Est-ce que tu as droit aux manipulations de bits ?


Message édité par matafan le 11-12-2004 à 22:17:35
n°920681
gilou
Modérateur
Modosaurus Rex
Posté le 11-12-2004 à 22:21:44  profilanswer
 

matafan a écrit :

Est-ce que tu as droit aux manipulations de bits ?

Je sens qu'on est plus loin de la masturbation intellectuelle, dans ce topic.  :whistle:  
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°920685
Ace17
Posté le 11-12-2004 à 22:40:19  profilanswer
 

Chronoklazm a écrit :

blueberry76 => j'ai dis "n fois" en sous entendant que ce serais n passage dans une boucle ou l'on fait l'operation que j'ai mis entre parenteses, donc aucune multiplication :D
 
Bein c'est bien ce que je disais (une double boucle) !


 
Ton programme realise une multiplication par n, pas une puissance  :sarcastic:  

n°920691
Chronoklaz​m
Posté le 11-12-2004 à 22:59:54  profilanswer
 

ah ouais c'est vrai je viens de capter ... ca fait n*(x^2) plus precisement :D

n°920699
Chronoklaz​m
Posté le 11-12-2004 à 23:26:55  profilanswer
 

En fait je pensé plus a des sigmas emboités :
 
Sachant que :
 
 i=X
-----
\
/     Xi  =  X1 + X2 + X3 + ... + Xi   Ca donne X^2
-----
 i=1  
 
 
Alors
 
  X       X           X
-----   -----       -----
\       \             \
/       /      ...    /        Xi     =     X^n
-----   -----       -----
  1       1           1
 
<--------------------->
          n-1  
 
On emboite donc comme ca n-1 sigmas, apres ca doit surement correspondre a ce que fait helloworld en implementé.


Message édité par Chronoklazm le 11-12-2004 à 23:31:23
n°920700
Taz
bisounours-codeur
Posté le 11-12-2004 à 23:31:29  profilanswer
 

gilou a écrit :

Je sens qu'on est plus loin de la masturbation intellectuelle, dans ce topic.  :whistle:  
A+,

il est temps de ce prendre en main

n°920702
Chronoklaz​m
Posté le 11-12-2004 à 23:37:00  profilanswer
 

Je pense qu'on peut l'implementer sans boucles de facon recursive.
 
Genre un truc du style
 

Code :
  1. int somme(int x, int n){
  2.   if (n == 1)
  3.       return x;
  4.   else
  5.       return x + somme(x, (n - 1));}
  6. int pow(int x, int n){
  7.   if (n == 2)
  8.       return somme(x, x);
  9.   else
  10.       return somme(x, pow(x, (n - 1)));}


 
Et voilà :) tout ceci sans aucune variable suplementaire mais une pile bien pleine :)


Message édité par Chronoklazm le 12-12-2004 à 00:05:38
n°920718
Ayuget
R.oger
Posté le 12-12-2004 à 00:10:38  profilanswer
 

pascal_ a écrit :

Il y a une multiplication  :D


ouais mais juste une :D
Si il en veut pas il peut faire
 
 
                            n
xPuissanceN = exp(:sum: ln(x))
                            1
 
:jap:


Message édité par Ayuget le 12-12-2004 à 00:11:17
n°920719
chrisbk
-
Posté le 12-12-2004 à 00:11:10  profilanswer
 

Taz a écrit :

il est temps de ce prendre en main


 
faudrait voir a se secouer un peu

n°920720
Chronoklaz​m
Posté le 12-12-2004 à 00:13:49  profilanswer
 

Kalimuxo a écrit :

Juste des additions ! Pas de fonctions transcandantes rien d'autre que des ADDITIONS ^^


 
 :jap:

n°920725
Taz
bisounours-codeur
Posté le 12-12-2004 à 00:31:46  profilanswer
 

somme(x, pow(x, (n - 1)));
 
 
un petit effort et tu tombes su Ackermann

n°920726
Chronoklaz​m
Posté le 12-12-2004 à 00:38:51  profilanswer
 

un petit peu de recursivité n'a jamais fait de mal à personne voyons :)

n°920727
Taz
bisounours-codeur
Posté le 12-12-2004 à 00:39:33  profilanswer
 

quand elle n'est pas terminale, si

n°920729
Chronoklaz​m
Posté le 12-12-2004 à 00:41:20  profilanswer
 

Bon là l'enveloppe n'est pas associative (je crois), mais donne moi une lambda et je t'ecrit ca en CPS si tu veux :D

n°920732
Ace17
Posté le 12-12-2004 à 00:59:36  profilanswer
 

Chronoklazm a écrit :

Je pense qu'on peut l'implementer sans boucles de facon recursive.
 
Genre un truc du style
 

Code :
  1. int somme(int x, int n){
  2.   if (n == 1)
  3.       return x;
  4.   else
  5.       return x + somme(x, (n - 1));}
  6. int pow(int x, int n){
  7.   if (n == 2)
  8.       return somme(x, x);
  9.   else
  10.       return somme(x, pow(x, (n - 1)));}


 
Et voilà :) tout ceci sans aucune variable suplementaire mais une pile bien pleine :)


 
pow(1, 0);  winner!  :sol:

n°920733
Chronoklaz​m
Posté le 12-12-2004 à 01:06:56  profilanswer
 


Code :
  1. int somme(int x, int n){
  2.    if (n == 1)
  3.        return x;
  4.    else
  5.        return x + somme(x, (n - 1));}
  6. int pow-iter(int x, int n, int k){
  7.    if (n == 2)
  8.        return k;
  9.    else
  10.        return pow-iter(x, (n - 1), somme(x, k));}


 
Et en faisant pow-iter(x, n, somme(x,x)) pour le lancement ...
 
Elle est terminale maintenant ?

n°920735
Chronoklaz​m
Posté le 12-12-2004 à 01:08:41  profilanswer
 

=>Ace 17 : Ah là t'a cassé le délire :D

n°920736
Ace17
Posté le 12-12-2004 à 01:15:18  profilanswer
 

quitte a faire de la recursivite terminale autant passer en iteratif!

n°920739
Chronoklaz​m
Posté le 12-12-2004 à 01:20:18  profilanswer
 

Code :
  1. int somme(int x, int n){
  2.    if (n == 1)
  3.        return x;
  4.    else
  5.        return x + somme(x, (n - 1));}
  6. int pow-iter(int x, int n, int k){
  7.  
  8.    if (n == 0) return 1;
  9.    else if (n == 1) return x;   
  10.    else if (n == 2) return k;
  11.    else return pow-iter(x, (n - 1), somme(x, k));}


 
Voilà quoi ! :kaola:
 
EDIT : C'est sur :jap: et bien c'est ce que je fais .


Message édité par Chronoklazm le 12-12-2004 à 01:21:35
n°920743
Chronoklaz​m
Posté le 12-12-2004 à 01:25:30  profilanswer
 

D'ou on pourrait tirer une conclusion hative ... les boucles for, while et cie c'est du mytho !

n°920746
Kalimuxo
!
Posté le 12-12-2004 à 01:49:25  profilanswer
 

Merci les gens ^^
 
Sinon autre problème :
 
a<--- a +1 OK
a<---- a + b MAL
a<----- a + 2 MAL
 
En gros faire x^n avec uniquement des manipulations avec des 1...
 


---------------
/* Signature */
n°920766
bjone
Insert booze to continue
Posté le 12-12-2004 à 03:06:22  profilanswer
 

et bien tu as x*x*x*x...
et le * tu le re-génères, en faisant des + avec décalages comme en CM1/CE2 (je sais plus quand est-ce que l'on apprends à faire des multiplications)

n°920767
bjone
Insert booze to continue
Posté le 12-12-2004 à 03:08:14  profilanswer
 

ou une bête boucle suis-je bête...
 
bon je sors il est tard pour mon cerveau :D

n°920788
kadreg
profil: Utilisateur
Posté le 12-12-2004 à 09:16:12  profilanswer
 

while (n) n*=n--
 
Ah merde, on avait dit pas de multiplication ...


Message édité par kadreg le 12-12-2004 à 09:17:09

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°920862
Chronoklaz​m
Posté le 12-12-2004 à 12:17:39  profilanswer
 

x^n : C'est ( ( x^(n-1) - 1 ) * n ) Additions de 1.
 
Genre
 
res = x;
 
Tantque ((res - x) != ( x^(n-1) - 1 ) * n )) faire
res++;
 
resultat res;
 
Mais bon là je triche un peu :D


Message édité par Chronoklazm le 12-12-2004 à 12:19:16
n°920868
chrisbk
-
Posté le 12-12-2004 à 12:20:39  profilanswer
 

kadreg a écrit :

while (n) n*=n--
 
Ah merde, on avait dit pas de multiplication ...


 
surtout que je suis pas convaincu que ca marche, ton truc, ca sort plutot la factorielle


Message édité par chrisbk le 12-12-2004 à 12:20:52
n°920983
Kalimuxo
!
Posté le 12-12-2004 à 14:09:57  profilanswer
 

Chronoklazm a écrit :


Mais bon là je triche un peu :D


 
mdr !
 
Un peu ?
 
res:=0
tant que res!= x^n faire
res:= res+1;
fin tq;
aussi ?
 
^^


---------------
/* Signature */
n°921139
Kalimuxo
!
Posté le 12-12-2004 à 19:13:44  profilanswer
 

Personne n'a d'idée ?


---------------
/* Signature */
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Comment faire x^n ?

 

Sujets relatifs
Plus de sujets relatifs à : Comment faire x^n ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)