Forum >> Principianti >> logaritmo

Pagina: 1

ciao!

L'esercizio dice:

" Il log₂ di un numero N è dato dal valore di M nell'equazione N = 2M
Il valore di M è approssimativamente uguale al numero di volte che M può essere diviso per 2 finchè non diventa 0.
Scrivete un ciclo che calcola questa approssimazione del log₂ di un numero N. "


Chi mi aiuta a capire?





Vai a controllare, l'esercizio presumo dica (e se non lo dice sarà un errore di stampa):

" Il log₂ di un numero N è dato dal valore di M nell'equazione N = 2^M
Il valore di M è approssimativamente uguale al numero di volte che N può essere diviso per 2 finchè non diventa 0.
Scrivete un ciclo che calcola questa approssimazione del log₂ di un numero N. "

Quidi per trovare M basta scrivere un ciclo che conti quante volte N può essere diviso per 2 finché non diventa 0.

Sai cosa sono i logaritmi?

Per esempio, il logaritmo in base 2 di 16 è 4, perchè 2 elevato alla quarta è uguale a 16.
Per esempio, il logaritmo in base 2 di 16 è 4, perchè 2 elevato alla quarta è uguale a 16.

Il log₂ (logaritmo in base 2) di un numero N (16) è dato dal valore di M (4) nell'equazione N = 2^M (16 = 2^4)

Per curiosità: l'esercizio era scritto come ho detto io?
No, allora deve essere un errore di stampa.
ciao!
A me l'esercizio viene così:

numero = int(input("Scegli un numero: "))
esponente = 0
num = numero

while num > 1:
num /=2
esponente += 1

if 2**esponente == numero and esponente == int(esponente):
print("Il log₂ di", numero,"è",esponente,)
print("2^",esponente,"è uguale a",2**esponente)
else:
esponente -= num
print("Il log₂ di", numero, "è", esponente)
print("2^",esponente,"più (",numero,"meno 2^",esponente,"), è uguale a\
"
, int(2**esponente +(numero - 2**esponente)))


--- Ultima modifica di guinomeip in data 2018-02-21 11:23:20 ---

--- Ultima modifica di guinomeip in data 2018-02-21 11:28:21 ---
Modifica il messaggio. Come ripete sempre il buon Palmux: "per inserire il codice Python si utilizza il tasto code, che trovi subito prima della tavolozza dei colori".
a me l'esercizio viene così:



numero = int(input("Scegli un numero: "))
esponente = 0
num = numero

while num > 1:
    num /= 2
    esponente += 1

if 2**esponente == numero and esponente == int(esponente):
     print("Il log₂ di", numero,"è",esponente)
     print("2^",esponente,"è uguale a",2**esponente)
else:
    esponente -= num
    print("Il log₂ di", numero, "è", esponente)
    print("2^",esponente,"più (",numero,"meno 2^",esponente,"), è uguale a\
", int(2**esponente +(numero - 2**esponente)))






--- Ultima modifica di guinomeip in data 2018-02-21 15:33:34 ---

--- Ultima modifica di guinomeip in data 2018-02-21 15:35:58 ---

--- Ultima modifica di guinomeip in data 2018-02-21 15:36:45 ---
L'esercizio chiede di calcolare "l'approssimazione del log₂ di un numero N".
Poiché il ciclo calcola solamente quante volte il numero può essere diviso per 2, la variabile esponente è un numero intero, che indicherà il valore esatto solamente se il numero è potenza di 2.
Se il numero scelto non è potenza di 2, la variabile esponente indicherà un'approssimazione, che può discostarsi parecchio dal valore reale in quanto priva di parte frazionaria.

Chi ha scritto l'esercizio ha commesso anche questo errore:
"Il valore di M è approssimativamente uguale al numero di volte che N può essere diviso per 2 finchè non diventa 0."
Che dovrebbe essere scritto in questo modo:
"Il valore di M è approssimativamente uguale al numero di volte che N può essere diviso per 2 finchè non diventa minore di 2."

Nel ciclo è più figo quindi utilizzare l'operatore di divisione intera // e scrivere la condizione del ciclo >= 2.

Quello che hai scritto dopo la clausola else è sbagliato, non avendo studiato i logaritmi hai fatto un pò di confusione.

Il programma richiesto da questo "strano" esercizio quindi è questo:
numero = int(input("Scegli un numero: "))
esponente = 0
num = numero

while num >= 2:
    num //= 2
    esponente += 1

if 2**esponente == numero and esponente == int(esponente):
    print("Il log₂ di", numero,"è",esponente)
    print("2^",esponente,"è uguale a",2**esponente)
else:
    print("Il log₂ di", numero,"è",esponente,"privo di parte frazionaria.")
    print("2^",esponente,"è uguale a",2**esponente,"che è minore di",numero,
          "perché l'esponente è privo di parte frazionaria.")



--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2018-02-21 21:37:04 ---


Pagina: 1



Esegui il login per scrivere una risposta.