Comment faire x^n ? - Algo - Programmation
Marsh Posté le 11-12-2004 à 16:25:09
Si vous avez un bout de code en C ça irait ...
Marsh Posté le 11-12-2004 à 16:55:20
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 ?
Marsh Posté le 11-12-2004 à 17:46:28
ReplyMarsh Posté le 11-12-2004 à 19:38:14
Chronoklazm a écrit : Donc x^n = tu fait une boucle qui fait n fois l'operation (X + X + ... (x fois, une boucle quoi) ... + X) |
non
la tu fais n*x
Marsh Posté le 11-12-2004 à 19:46:21
Juste des additions ! Pas de fonctions transcandantes rien d'autre que des ADDITIONS ^^
Marsh Posté le 11-12-2004 à 20:03:40
Ca revient à coder la multiplication avec des additions.
Multiplier x par x, c'est ajouter x fois x à un total.
Code :
|
Marsh Posté le 11-12-2004 à 21:29:44
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
Bein c'est bien ce que je disais (une double boucle) !
Marsh Posté le 11-12-2004 à 22:17:20
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 ?
Marsh Posté le 11-12-2004 à 22:21:44
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.
A+,
Marsh Posté le 11-12-2004 à 22:40:19
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 |
Ton programme realise une multiplication par n, pas une puissance
Marsh Posté le 11-12-2004 à 22:59:54
ah ouais c'est vrai je viens de capter ... ca fait n*(x^2) plus precisement
Marsh Posté le 11-12-2004 à 23:26:55
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é.
Marsh Posté le 11-12-2004 à 23:31:29
gilou a écrit : Je sens qu'on est plus loin de la masturbation intellectuelle, dans ce topic. |
il est temps de ce prendre en main
Marsh Posté le 11-12-2004 à 23:37:00
Je pense qu'on peut l'implementer sans boucles de facon recursive.
Genre un truc du style
Code :
|
Et voilà tout ceci sans aucune variable suplementaire mais une pile bien pleine
Marsh Posté le 12-12-2004 à 00:10:38
pascal_ a écrit : Il y a une multiplication |
ouais mais juste une
Si il en veut pas il peut faire
n
xPuissanceN = exp(:sum: ln(x))
1
Marsh Posté le 12-12-2004 à 00:11:10
ReplyMarsh Posté le 12-12-2004 à 00:13:49
Kalimuxo a écrit : Juste des additions ! Pas de fonctions transcandantes rien d'autre que des ADDITIONS ^^ |
Marsh Posté le 12-12-2004 à 00:31:46
somme(x, pow(x, (n - 1)));
un petit effort et tu tombes su Ackermann
Marsh Posté le 12-12-2004 à 00:38:51
un petit peu de recursivité n'a jamais fait de mal à personne voyons
Marsh Posté le 12-12-2004 à 00:41:20
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
Marsh Posté le 12-12-2004 à 00:59:36
Chronoklazm a écrit : Je pense qu'on peut l'implementer sans boucles de facon recursive.
|
pow(1, 0); winner!
Marsh Posté le 12-12-2004 à 01:06:56
Code :
|
Et en faisant pow-iter(x, n, somme(x,x)) pour le lancement ...
Elle est terminale maintenant ?
Marsh Posté le 12-12-2004 à 01:15:18
quitte a faire de la recursivite terminale autant passer en iteratif!
Marsh Posté le 12-12-2004 à 01:20:18
Code :
|
Voilà quoi !
EDIT : C'est sur et bien c'est ce que je fais .
Marsh Posté le 12-12-2004 à 01:25:30
D'ou on pourrait tirer une conclusion hative ... les boucles for, while et cie c'est du mytho !
Marsh Posté le 12-12-2004 à 01:49:25
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...
Marsh Posté le 12-12-2004 à 03:06:22
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)
Marsh Posté le 12-12-2004 à 03:08:14
ou une bête boucle suis-je bête...
bon je sors il est tard pour mon cerveau
Marsh Posté le 12-12-2004 à 09:16:12
while (n) n*=n--
Ah merde, on avait dit pas de multiplication ...
Marsh Posté le 12-12-2004 à 12:17:39
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
Marsh Posté le 12-12-2004 à 12:20:39
kadreg a écrit : while (n) n*=n-- |
surtout que je suis pas convaincu que ca marche, ton truc, ca sort plutot la factorielle
Marsh Posté le 12-12-2004 à 14:09:57
Chronoklazm a écrit : |
mdr !
Un peu ?
res:=0
tant que res!= x^n faire
res:= res+1;
fin tq;
aussi ?
^^
Marsh Posté le 11-12-2004 à 16:22:52
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 */