Go Down

Topic: Come calcolare il valore x elevato a y (Read 678 times) previous topic - next topic

kikko_965

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)....


sciorty

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

uwefed

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

pippo72

#3
Jan 20, 2014, 10:11 pm Last Edit: Jan 20, 2014, 10:13 pm by pippo72 Reason: 1
Ciao.

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

... credo ...

leo72

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.

kikko_965

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.

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 ;) :P)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

sciorty


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 ;) :P)


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

nid69ita

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.  :smiley-mr-green:
my name is IGOR, not AIGOR

kikko_965

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

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?

Etemenanki

#10
Jan 21, 2014, 03:18 pm Last Edit: Jan 21, 2014, 03:20 pm by Etemenanki Reason: 1
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 ?
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

kikko_965

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

Go Up