Oppure

Loading
22/02/09 14:46
trenta3
Mi spiego subito.
Vorrei un ciclo che mi elevasse a potenza un numero double a esponente double.
So che già esiste la funzione pow() della libreria <math.h> ma vorrei un ciclo da mettere nel mio programma in modo da non appesantirlo troppo.
Per adesso, cercando con Google ho trovato solo cicli di elevamento a potenza con variabili intere.

Posto qui sotto il codice che ho provato a fare:
double potenza(double base, double esp){
double i, ris;
ris = 1;
i = 1;
while(i<=esp)
{
      ris = ris * base;
      ++i;
}
return (ris);
}


Il problema è che questocodice ritorna sempre 1. Credo che sia per colpa dell' i++

Aspetto con ansia le vostre risposte.
aaa
22/02/09 17:02
theprogrammer
Non puoi utilizzare questo metodo per calcolare

x elevato a y

se l'esponente y e' REALE.

Quel metodo vale SOLAMENTE se l'esponente e' INTERO.

Nel caso di valori reali dell'esponente, la potenza e' definita come

"estremo superiore della successione x elevato a y-ennesimo"

e i metodi di calcolo sono diversi ...

Ti consiglio di dare un'occhiata alle

"potenze con esponente reale"

su un libro o una guida di matematica.

aaa
23/02/09 16:55
trenta3
Grazie, sono andato a leggere qui(arrigoamadori.com/lezioni/TutorialMatematica/FunzioniRealiNotevoli/…) ed ho provato a scrivere questo codice:

La funzione power è quella a cui si passa la potenza, le altre sono quelle che chiama.
Ho provato ad eseguirlo ma mi dà come risultato 1.#INF00

double power(double base, double esp){
double a, ris;
int c;
long int b, d;
a = esp;
b = (long int)esp;
while ((b>a) or(b<a)){
a = a * 10;
c = c + 1;
b = (long int)a;
}
d = potenza(10, c);

ris = Sqrt2(pot(base,b),d);

return (ris);
}



double Sqrt(int n,int x){ 
double h=n/x; 
int i; 
for(i=0;i < NUM_CICLI ;i++){ 
h = (h+(n/h))/x; 
}
return h; 
}


long int potenza(int base, int esp){ 
long int i, ris; 
ris = 1; 
i = 1; 
while(i<=esp) 
{ 
      ris = ris * base; 
      ++i; 
} 
return (ris); 
} 

double Sqrt2(long double n,long int x){ 
double h=n/x; 
int i; 
for(i=0;i < NUM_CICLI ;i++){ 
h = (h+(n/h))/x; 
}
return h; 
}

long double pot(double base, int esp){ 
long double ris;
int i; 
ris = 1; 
i = 1; 
while(i<=esp) 
{ 
      ris = ris * base; 
      ++i; 
} 
return (ris); 
} 




Sono disperato perchè ho scritto tantissimo.
Perfavore, aiutatemi!:d
aaa
23/02/09 17:04
theprogrammer
Scusa ... ma quale metodo hai seguito?

In quella pagina si parla solo di funzione esponenziale non di potenza ...
aaa
24/02/09 14:51
trenta3
Ho seguito la parte che dice:
.-.-.-.-.
Procediamo allora costruendo questa successione :



In questo modo ci avviciniamo sempre di più al valore cercato .

Ma i numeri decimali agli esponenti sono numeri razionali (con un numero finito di decimali o con un numero infinito di decimali periodici), cioè esprimibili come frazioni di numeri interi. Possiamo allora scrivere :

.

Passando ora alle radici, otteniamo la successione :

.

Questa successione, procedendo in questo modo all'infinito, tenderà al numero .

Le formule presentate in questo paragrafo ci permettono, in conclusione, di eseguire operazioni con le potenze e calcolare potenze con qualunque esponente reale (razionale o irrazionale).
._._._._._._._.

Ho pensato quindi di trasformare l'esponente in frazione e metterla sotto radice quadrata dopo aver elevato a potenza la base per il numeratore della frazione per poterlo calcolare.

Credo che questo sia il metodo giusto.
Vi prego aiutatemi!!!!!!!!!!!!!
:d:d
aaa
24/02/09 16:25
trenta3
Grazie a tutti, ho già rimediato:

Sono andato nell'header Math.h e ho preso le funzioni inerenti a pow(), ora il programma và alla perfezione.




Grazie a tutti!

:D:D:D
aaa
25/02/09 17:12
HeDo
Postato originariamente da trenta3:

Grazie a tutti, ho già rimediato:

Sono andato nell'header Math.h e ho preso le funzioni inerenti a pow(), ora il programma và alla perfezione.




Grazie a tutti!

:D:D:D


beh ovvio, con i prototipi delle funzioni già pronte stai usando le built-in, bravo bravo

non hai risolto il tuo problema, lo hai aggirato
aaa
25/02/09 20:02
theprogrammer
In effetti, avevo capito che tu volessi scrivere il codice che implementasse un algoritmo di calcolo della potenza.

Se avessi chiesto come calcolare la potenza con la libreria standard del C, ti avrei suggerito immediatamente la pow ...

Per maggiori informazioni sulla pow (e altro)

cplusplus.com/reference/clibrary/cmath/…
aaa