Mi stavo chiedendo come ottenere l'inversione del potere in Ruby?Qual è il contrario di Math Power (**) in Ruby?
2 ** 4 # => 16
e poi mi piacerebbe ottenere l'inverso di esso, e non sono sicuro quale operatore utilizzare
16 ?? 2 # => 4
Mi stavo chiedendo come ottenere l'inversione del potere in Ruby?Qual è il contrario di Math Power (**) in Ruby?
2 ** 4 # => 16
e poi mi piacerebbe ottenere l'inverso di esso, e non sono sicuro quale operatore utilizzare
16 ?? 2 # => 4
L'inverso di elevamento a potenza è il logaritmo. Se ab = c
, quindi logac = b
.
Si possono trovare le funzioni logaritmiche nel modulo Math
, in particolare per log()
base- e e log10()
per la base-10.
Per avere un logaritmo in una diversa base (per esempio n
), utilizzare la formula logNa = logxa/logxN
, dove x
è un valore, ad esempio e o 10.
Per caso specifico :
log216
= loge16/loge2
= Math.log(16)/Math.log(2)
= 4
Se si considera la spiegazione buona perché espande la vostra conoscenza, o il male perché hai odiato di alta matematica scolastica, è interamente a voi :-)
Math.log(16)/Math.log(2)
Oppure, in alternativa, fare in questo modo:
>> 16**(1.0/2)
=> 4.0
Questa è una coincidenza _totale a proposito :-) Applicandolo a 3^4 = 81, non è vero dire che 81^(1/3) è 4 (in realtà è circa 4.33). – paxdiablo
@paxdiablo - non è una coincidenza, è matematica. Hai un errore nel tuo esempio. Per 3^4 = 81 dovrebbe essere 81^(1/4) che equivale a 3, non 81^(1/3). – maro
@maro, hai fatto le sostituzioni in modo errato. Il modulo che hai usato sarebbe corretto se Jeremy avesse dichiarato 16^(1/4) = 2, e sarebbe matematicamente okay. Ma quello dato è corretto solo per coincidenza.È equivalente all'equazione (in) che ho menzionato nel mio primo commento. – paxdiablo
In realtà:
Maro è quindi "giusto" da solo ma non come supporto per la risposta di Jeremy Murray-Wakefields, che di per sé non è tanto "sbagliata" quanto non è la risposta giusta alle domande dell'OP.
Spero che sia definitivo!
un modo più pulito per ottenere il logaritmo, a partire da Ruby 1.9.1, sarebbe quella di utilizzare Math.log2
:
[1] pry(main)> Math.log2(2**4)
=> 4.0
Ah, grazie mille paxdiablo questa è stata una spiegazione molto buona, e sì hai ragione Ero solito odiarlo, ma ora posso vedere che mi sono perso molto a causa di questo, grazie! – zanona
Ho fatto +1 quando ho imparato qualcosa sulla matematica! Quindi grazie. –