Newsgroup: it.comp.lang.c
Titolo: radice cubica

Esiste una funzione in math.h per la radice cubica? Ho provato elevando ad
1/3, ma mi da errore (illegal use of floating point)

1/3, ma mi da errore (illegal use of floating point)
Prova cosi' :
#include <stdio.h>
#include <math.h>
double radix( double b, double e )
{
       return ( exp( e * log( b ) ) ) ;
}
main()
{
    printf( "%f\n", radix( 27, 1.0/3.0 ) ) ;
}
--
Andrea Laforgia
andrea_...@bigfoot.com

 }
Vedendo questo esempio colgo l'occasione per fare una domanda:
Quand'è che conviene usare una macro e non una funzione ad hoc?
In questo caso, per esempio usare la macro:
#define    radix(e,b)    (exp((e)*log(b)));
(salvo errori)
sarebbe migliore in termini di "efficienza", vero?
mettendo le parentesi in questo modo non ci dovrebbero essere problemi dopo
l'intervento del preprocessore?
--
________________________________
Togliete NoSpaM per rispondermi
Buone Feste
bye Brain

 sarebbe migliore in termini di "efficienza", vero?
Ti preoccupi dell'efficenza per pochi cicli di CPU quando nella macro hai 2
istruzioni terribili, quanto a velocità?
--
Alessandro Monti
P.S.
Ma "efficenza" è con o senza la "i"?

sarebbe migliore in termini di "efficienza", vero?
Forse si', ma non condivido l'uso di macro del genere. Meglio usare le
funzioni. In questo caso, tra l'altro, in una funzione e' generalmente
utile aggiungere dei controlli, tipo :
double radix( b, e ) 
{
       if ( e == 0.0 ) return 1.0 ;
       else
       if ( b > 0.0 )  return (exp(e*log(b))) ;
}
--
Andrea Laforgia
andrea_...@bigfoot.com

 Ma "efficenza" è con o senza la "i"?
Le persone che conoscono l'italiano scrivono "efficienza", io no :-((


 Le persone che conoscono l'italiano scrivono "efficienza", io no :-((
Quindi non conosci l'italiano? Eppure scrivevi "efficienza". Che trucco è
questo?
--
Alessandro Monti

 (salvo errori)
Io toglierei il ; alla fine della define, perche' penso che la
chiameresti cosi':
radix(e,b);
e ti ritroveresti con due ;
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it

 questo?
La faccina sta ad indicare che "purtroppo" non conosco l'italiano ed ho
dovuto guardare sul dizionario come si scrive per correggermi.


 sarebbe migliore in termini di "efficienza", vero?
si e no... poiche' il #define causerebbe, prima della fase di parsing, la
sostituzione della prima funzione con la seconda. di conseguenza il numero
di operazioni sarebbe doppo. se invece utilizzi una funzione, essa viene
compilata solo una volta, e le altre sono solo delle "call" verso di lei. ma
questo causerebbe un maggior lavoro a livello di varibili non globabli che
devono caricarsi ecc...
personalmente io userei la funzione separata.
Ciao

 personalmente io userei la funzione separata.
Ieri pensando a questo esempio, che si può ottimizzare mettendo un
espressione condizionale a pari dell'if che era stato messo nell'esempio di
Andrea.
Però forse l'uso di una funzione, nel caso venga richiamata molte volte può
rendere il codice compilato più compatto permette alle CPU di sfruttare
meglio la cache... ma penso che stiamo andando a cercare il pelo nell'uovo


 meglio la cache... ma penso che stiamo andando a cercare il pelo nell'uovo
appunto, il richiamo di una funzione e' compilato con tanti "push" quanti
sono gli argomentfi delle funzioni, e poi un "call funzione". con il define
invece sostituisci tutte le ricorrenze del primo argomento del define con il
secondo, quindi viene compilata un maggior numero di volte lasciando il tuo
programma piu' grosso
(ok, e' da paranoici :)
Ciao