Come calcolare il valore x elevato a y

Scuste forse sono cotto.....
Che funzione di arduino cè per elevare un valore ad un altro valore....mi spiego.
Ho una dato in una variabile (x) e lo voglio elevare a (y)....

Il classico " ^ " è un operatore bitwise, quindi non dovrebbero esserci operatori per l'elevamento a potenza.. L'alternativa è un piccolissimo ciclo while :slight_smile:

Che cifre devi usare?

Stai attento; con le potenze vai subito in overflow. Se vuoi avere tutte le cifre devi usare un unsignad long che va fino ca 4 miliardi oppure dei Float che vanno fino a 3.4028235 E+38 ma hanno solo 6 o 7 cifre significative.

Ciao Uwe

Ciao.

Ecco la soluzione:http://arduino.cc/en/Reference/Pow

... credo ...

Soluzione n° 1, quella di pippo72: usare la funzione pow che, però, ha un difetto: agisce sui float, quindi è lenta ed imprecisa.

Soluzione n° 2, quella di sciorty: fai una piccola funzione che semplicemente moltiplica x per sé stesso y volte (questo è, alla fine, una potenza). Ottimo se la devi usare per numeri interi perché la moltiplicazione è un'operazione supportata via hardware dalla CPU stessa e quindi è rapida; inoltre usando interi non perdi in precisione.

OK il fatto è che devo elevare a potenza un numero nel range -5 / 1
praticamente devo convertire un valore espresso in dBM in mW.

10 ^ (dBm/10) dove dBm va da -50 a 0.

Aspetta, devi elevare a potenza con un'esponente negativo ? ... io e la matematica ci odiavamo reciprocamente :P, ma a quanto ricordo, un numero elevato a potenza con un'esponente negativo era equivalente al reciproco dello stesso numero elevato con lo stesso esponente ma positivo ...

Cioe', se non ricordo male

a^-b = 1/(a^b) ... cioe', a elevato alla meno b, dovrebbe essere lo stesso che uno diviso (a elevato b)

(matematici del forum, correggetemi se dico ca**ate :wink: :P)

Etemenanki:
Aspetta, devi elevare a potenza con un'esponente negativo ? ... io e la matematica ci odiavamo reciprocamente :P, ma a quanto ricordo, un numero elevato a potenza con un'esponente negativo era equivalente al reciproco dello stesso numero elevato con lo stesso esponente ma positivo ...

Cioe', se non ricordo male

a^-b = 1/(a^b) ... cioe', a elevato alla meno b, dovrebbe essere lo stesso che uno diviso (a elevato b)

(matematici del forum, correggetemi se dico ca**ate :wink: :P)

Non sono un matematico, ma sto preparando analisi 1 e confermo :stuck_out_tongue:

Mi sà di si, corretto.

2 alla -3 = 0,125
1/ (2 elevato 3) = 1/8 = 0,125 a meno che ho beccato il caso particolare. :grin:

Anche a me i conti tornano...... :smiley:

Detto ciò e che devo convertire il valore in dBm letto dal pin analogico e convertirlo in watt, quindi ho come origine un valore con virgola, il solo sistema è quello di usare la funzione pow o vi risulta ci siano altri sistemi più precisi?

Intendi valore con virgola quello letto ? ... il convertitore A/D di Arduino e' un 10 bit, quindi ti da un valore compreso fra 0 e 1023, riferito alla Vref (in parole povere, se con un riferimento di 5V del convertitore leggi 2,5V su un pin analogico, il valore che ottieni non e' "2,5", e' "511"), quindi un'intero ... sta a te dopo trasformarlo in un valore con decimali ... o intendevi un'altra cosa ?

ovvio..... :grin:
Esempio:
con ingresso a livello 0 so chè il trasduttore legge -60 dBm
con ingresso a livello 1024 ho 0 dBm