PDA

Visualizza la versione completa : [c++] radice cubica


mica81
04-01-2005, 23:16
salve, se devo calcolare la radice quadrata di un numero scrivo:


sqrt(n);

come si chiama la funzione che chiama la radice cubica nel c++? uso la libreria standard #include<math.h>
a scopo di esercizio volevo compilare questo programmino:


#include<iostream.h>
#include<math.h>

double quadrata(double c)
{ return sqrt(c); }

double cubica(double d)
{ return 2/(3 * (d * d)); }

int main()
{
while(true)
{
double n;
int scelta;
cout<<"\n";
cout<<"1 Calcolare la radice quadrata\n";
cout<<"2 Calcolare la radice cubica\n";
cout<<"3 Esci\n";
cin>>scelta;
switch(scelta)
{
case 1:
cout<<"Inserisci un numero: ";
cin>>n;
cout<<"\n"<<"La radice quadrata di "<< n <<" e': "<< quadrata(n)<<"\n"<<endl;
break;
case 2:
cout<<"Inserisci un numero: ";
cin>>n;
cout<<"\n"<<"La radice cubica di "<< n <<" e': "<< cubica(n)<<"\n"<<endl;
break;
case 3:
return 0;
default:
//system("alarm");
cout<<"scelta non compresa nelle alternative!\n";
}
system("pause");
}
}

grazie dell'aiuto!

DYNAM!C+
04-01-2005, 23:19
pow( <radicando>, 1/<radice> );

da math.h

mica81
04-01-2005, 23:24
cioè nel mio caso sarebbe:


pow(n, 1/3)
?

DYNAM!C+
04-01-2005, 23:25
Originariamente inviato da mica81
cioè nel mio caso sarebbe:


pow(n, 1/3)
?

si :fagiano:

mica81
04-01-2005, 23:26
hum strano però se provo il programma con 27 mi scrive 1 invece che 3... :confused:

DYNAM!C+
04-01-2005, 23:39
strano...

prova con la funzione cbrt( <numero> );



documentazione su POW

http://groups.google.it/groups?hl=it&lr=&threadm=chh53d%24m0r%242%40newsfeed.cineca.it&rnum=1&prev=/groups%3Fq%3D%2522radice%2Bcubica%2522%2B%2BPOW%26 hl%3Dit%26lr%3D%26selm%3Dchh53d%2524m0r%25242%2540 newsfeed.cineca.it%26rnum%3D1

http://groups.google.it/groups?q=%22radice+cubica%22++POW&hl=it&lr=&selm=MPG.169e3bd1b0c043af989b6c%40news.enter.it&rnum=4

DYNAM!C+
04-01-2005, 23:44
C'e' un errore abbastanza facile da comprendere,
ma che a molti puo' risultare difficile da identificare a
colpo d'occhio:

pow(n,1/3) è sempre uguale a 1, perche' 1/3 e' una divisione
intera e da sempre 0 come risultato. Almeno uno dei due operandi
deve essere in virgola mobile.


quindi...

pow( <numero>, 1/3.0 );

edriv
05-01-2005, 11:04
Scusate, ma io sapevo che il secondo argomento di pow() è un intero... quindi la conversione in int è autoatica anche con 1.0/3 :confused:

pprllo
05-01-2005, 12:37
No. Il prototipo di pow è:

double pow(double x, double y);

pprllo
05-01-2005, 12:38
Comunque, per andare sicuro, fai:


pow(n, (double)1/3);

Loading