Newsgroup: it.comp.lang.c++
Titolo: Elevamento a potenza

Ho bisogno di implementare, in modo più efficiente possibile, l'elevamento a
potenza. Io ho trovato questa implementazione, voi ne conoscete altre?
long double pow(long double base, long double expon)
{
 if (expon == 0) return 1;
 while (expon > 1) { base *= base; expon--; }
 return base;
}
Secondo voi la funzione di libreria pow può andare bene? Cioè, non è troppo
lenta? Non ho grandi esigenze sulla velocità, ma in futuro può darsi che
queste sorgano... inoltre questa posso renderla inline mentre pow (di
libreria) no; guadagno molto?
Inoltre, sempre per una questione di velocità, c'è qualcosa di meglio di
atof per convertire stringhe in valori di tipo long double?
Altra domanda (questa è l'ultima lo giuro :-) : le funzioni di libreria che
ho visto prendono argomenti double, non c'è qualcosa in long double, che è
il tipo che devo usare?
--
Kojak
http://space.tin.it/io/viscorci
vrke...@hotmail.com
"I close my eyes
and I see
you
standing there
I cry
tears
of sorrow
I die."

 libreria) no; guadagno molto?
E` probabile che la funzione di libreria sia piu` rapida di
qualsiasi cosa tu possa scrivere in C o C++, e normalmente i
compilatori hanno opzioni apposite per richiedere espansione
inlinea delle funzioni matematiche di libreria.
Alex

 il tipo che devo usare?
Qui bisogna aspettare la risposta di qualche guru del C/C++.
ciao, Leo
-- 
NOSPAM: Change L.G With my 
firstname.name
, and remove nospam from the
address!
    .--.     
   |o_o |    Cheap, Fast, Flexible - Linux users may pick any 3
   |:_/ |    
  //   \ \   
 (|     | )  
/'\_   _/`\  Leopoldo Ghielmetti, Steria Informatic SA
\___)=(___/

 ciao, Leo
Ciao e grazie per la pazienza!!!


 il tipo che devo usare?
Non mi pare che esistano funzioni standard, nel compilatore della
borland erano pero` presenti delle versioni fatte apposta per i long
double.
Paolo

come funziano?
La prima sposta i bit a destra di i posizioni (divide dunque per 2^i), 
la  seconda a destra (moltiplica per 2^i).
Paolo

 piu` breve, ma anche molto piu` lenta).
Questo mi pare interessante. Non e' che per caso ti ricordi le versioni
dei compilatori che avevate utilizzato?
Ciao,
Nicola

 piu` breve, ma anche molto piu` lenta).
Mi ricorda il Duff's device ...
Per i curiosi, 
http://www.lysator.liu.se/c/duffs-device.html
 ...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

dei compilatori che avevate utilizzato?
Borland C++ 5.02, mentre mi pare VC++ 5.0 (o forse 6.0?)...
Purtroppo non ho conservato quelle e-mail...
Probabilmente gli stessi risultati valgono per strcpy e funzioni affine!
Paolo

 la  seconda a destra (moltiplica per 2^i).
Quindi con una variabile di 8 bit (char?) potremmo dire:
00001000 >> 1        ==    00000100
00001000 << 1        ==    00010000
Giusto?
e se io ho un int (da 16 bit?), spostando il secondo bit verso sinistra
posso cambiare anche il segno del numero?
Cioè, se da 01000000 passo a 10000000 il numero diventa negativo, no? (mi
pare di aver letto che il primo bit indica il segno, ho ragione?)
Mi sapreste consigliare qualche libro online dove trovare spiegazioni per
queste istruzioni? (Suppongo ce ne siano tante altre di questo tipo...)
Sarebbe meglio online, dato che il budget di un sedicenne è moooolto
ristretto!!! (L'inglese non è un problema)
Ho già il libro di Eckel, ma questi operatori li dà per scontati...
