Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema con elevamento a potenza (double)
Forum - C/C++ - Problema con elevamento a potenza (double)

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
trenta3 (Normal User)
Newbie


Messaggi: 16
Iscritto: 17/12/2008

Segnala al moderatore
Postato alle 15:46
Domenica, 22/02/2009
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:
Codice sorgente - presumibilmente C#

  1. double potenza(double base, double esp){
  2. double i, ris;
  3. ris = 1;
  4. i = 1;
  5. while(i<=esp)
  6. {
  7.       ris = ris * base;
  8.       ++i;
  9. }
  10. return (ris);
  11. }



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

Aspetto con ansia le vostre risposte.

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 18:02
Domenica, 22/02/2009
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.


PM Quote
Avatar
trenta3 (Normal User)
Newbie


Messaggi: 16
Iscritto: 17/12/2008

Segnala al moderatore
Postato alle 17:55
Lunedì, 23/02/2009
Grazie, sono andato a leggere qui(http://www.arrigoamadori.com/lezioni/TutorialMatematica/Fu ... 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
Codice sorgente - presumibilmente C#

  1. double power(double base, double esp){
  2. double a, ris;
  3. int c;
  4. long int b, d;
  5. a = esp;
  6. b = (long int)esp;
  7. while ((b>a) or(b<a)){
  8. a = a * 10;
  9. c = c + 1;
  10. b = (long int)a;
  11. }
  12. d = potenza(10, c);
  13.  
  14. ris = Sqrt2(pot(base,b),d);
  15.  
  16. return (ris);
  17. }
  18.  
  19.  
  20.  
  21. double Sqrt(int n,int x){
  22. double h=n/x;
  23. int i;
  24. for(i=0;i < NUM_CICLI ;i++){
  25. h = (h+(n/h))/x;
  26. }
  27. return h;
  28. }
  29.  
  30.  
  31. long int potenza(int base, int esp){
  32. long int i, ris;
  33. ris = 1;
  34. i = 1;
  35. while(i<=esp)
  36. {
  37.       ris = ris * base;
  38.       ++i;
  39. }
  40. return (ris);
  41. }
  42.  
  43. double Sqrt2(long double n,long int x){
  44. double h=n/x;
  45. int i;
  46. for(i=0;i < NUM_CICLI ;i++){
  47. h = (h+(n/h))/x;
  48. }
  49. return h;
  50. }
  51.  
  52. long double pot(double base, int esp){
  53. long double ris;
  54. int i;
  55. ris = 1;
  56. i = 1;
  57. while(i<=esp)
  58. {
  59.       ris = ris * base;
  60.       ++i;
  61. }
  62. return (ris);
  63. }




Sono disperato perchè ho scritto tantissimo.
Perfavore, aiutatemi!:d

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 18:04
Lunedì, 23/02/2009
Scusa ... ma quale metodo hai seguito?

In quella pagina si parla solo di funzione esponenziale non di potenza ...

PM Quote
Avatar
trenta3 (Normal User)
Newbie


Messaggi: 16
Iscritto: 17/12/2008

Segnala al moderatore
Postato alle 15:51
Martedì, 24/02/2009
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

PM Quote
Avatar
trenta3 (Normal User)
Newbie


Messaggi: 16
Iscritto: 17/12/2008

Segnala al moderatore
Postato alle 17:25
Martedì, 24/02/2009
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

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 18:12
Mercoledì, 25/02/2009
Testo quotato

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

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:02
Mercoledì, 25/02/2009
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)

http://www.cplusplus.com/reference/clibrary/cmath/pow.html

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:05
Giovedì, 26/02/2009
Testo quotato

Postato originariamente da HeDo:

Testo quotato

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



beh in effetti non e' cosi' che si risolvono i problemi...
comunque, se puo' servire, basta ricordarsi che:

a^b = e^(b*ln(a))  per ogni a e b con a > 0

ciao.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo