Pages: [1]   Go Down
Author Topic: Come calcolare il valore x elevato a y  (Read 477 times)
0 Members and 1 Guest are viewing this topic.
Udine
Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21466
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

lovadina (TV)
Offline Offline
Full Member
***
Karma: 5
Posts: 132
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao.

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

... credo ...
« Last Edit: January 20, 2014, 04:13:00 pm by pippo72 » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22638
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Udine
Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Disperso nel nauseante oceano della burocrazia
Offline Offline
Edison Member
*
Karma: 77
Posts: 2461
Io sono l'ultimo,
e parlero' al vuoto
in ascolto.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aspetta, devi elevare a potenza con un'esponente negativo ? ... io e la matematica ci odiavamo reciprocamente smiley-razz, 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 smiley-wink smiley-razz)
Logged

"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aspetta, devi elevare a potenza con un'esponente negativo ? ... io e la matematica ci odiavamo reciprocamente smiley-razz, 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 smiley-wink smiley-razz)

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

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4802
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

my name is IGOR, not AIGOR

Udine
Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Anche a me i conti tornano...... smiley-grin

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?
Logged

Disperso nel nauseante oceano della burocrazia
Offline Offline
Edison Member
*
Karma: 77
Posts: 2461
Io sono l'ultimo,
e parlero' al vuoto
in ascolto.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
« Last Edit: January 21, 2014, 09:20:27 am by Etemenanki » Logged

"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Udine
Offline Offline
Full Member
***
Karma: 0
Posts: 128
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: