Logarithmus

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

EIne ganz kleine Frage :D
Welche Funktion berechnet den 10er Logarithmus einer Zahl?
Hab irgendwo mal log10(x) gelesen, klappt aber nicht :(

mfg tyho

PS: Kann mir jemand nen Tipp geben, wie man sowas selber finden kann?^^ googlen hilft nicht :(
Das muss ich mal loswerden:
Wenn ihr euch mal wundert, was ich für dämliche Fragen stelle:
Ich bin ein Python-Newbie!
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Was geht denn da nicht??

Code: Alles auswählen

>>> import math
>>> math.log10(100)
2.0
>>>

Und zu dem Thema Wie suche ich richtig:

Ich habe einfach mal

python log10(x)

in die Google-Suche eingegeben, und der erste Treffer zeigt hierhin.

mfg, querdenker
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Oder du schaust einfach in das python manual
mfg

Thomas :-)
tyho
User
Beiträge: 31
Registriert: Samstag 18. März 2006, 13:47

danke schön
:P
Das muss ich mal loswerden:
Wenn ihr euch mal wundert, was ich für dämliche Fragen stelle:
Ich bin ein Python-Newbie!
tiziantheonlyone
User
Beiträge: 3
Registriert: Donnerstag 14. Mai 2020, 21:36

Sooo… 14 Jahre zu spät... aber ich hoffe irgendwer liest das hier und es hilft ihm. Ich glaube es gibt so wirklich keine Logarithmus Funktion in Python... daher hab ich hier meine eigene Variante eines Logarithmus-Rechners :geek: :wink:
Er Funktioniert nach dem Annährungsprinzip. Funktioniert aber meiner Meinung nach gut. g = b**100 und k = b**(-100) begrenzen den Taschenrechner auf den Maximalwert 100 des gesuchten Exponenten und den Minimalwert auf -100.

b = float(input("Was ist deine Basis?"))
if b == 0:
print("Der gesuchte Exponent ist 0")
quit()
e = float(input("Was ist dein Ergebnis?"))
if e == 0:
print("Der gesuchte Exponent ist 1")
quit()
else:
g = b**100
k = b**(-100)
lg = 100
lk =-100
m = (lk+lg)/2
if e > g:
quit("Der gesuchte Exponent ist zu groß!")
if e < k:
quit("Der gesuchte Exponent ist zu klein!")
i=0

for i in range (100):
if b**m > e:
lg = m
m = (lk+m)/2
i+1
elif b**m < e:
lk = m
m = (lg+m)/2
i+1
elif e == 0:
l=0
break
lm = (lg+lk)/2
print("Der gesuchte Exponent ist",lm)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@tiziantheonlyone: Was gefällt Dir an math.log nicht?
Eingerückt wird in Python immer mit 4 Leerzeichen, nicht 2.
`m = (lk+lg)/2` wird an vier Stellen im Code berechnet, obwohl es nur an einer nötig wäre.
Da `i` in der for-Schleife gesetzt wird, ist das `i=0` unnötig. `i+1` tut sowieso nichts.
Vom Code bleibt also nicht mehr viel übrig:

Code: Alles auswählen

lg = 100
lk =-100
for i in range(100):
    m = (lk+lg)/2
    if b**m > e:
        lg = m
    elif b**m < e:
        lk = m
print("Der gesuchte Exponent ist", m)
tiziantheonlyone
User
Beiträge: 3
Registriert: Donnerstag 14. Mai 2020, 21:36

Naja ich bin auch nur ein Neuling der anderen helfen will. Das war halt meine Lösung :D
Deine Lösung ist natürlich kompakter, aber beides Funktioniert. Wenn man sich zwei drei byte spaaren möchte ist Dein Programm natürlich besser. :wink:
Für meinen ersten Versuch bin ich trotzdem zufrieden.
tiziantheonlyone
User
Beiträge: 3
Registriert: Donnerstag 14. Mai 2020, 21:36

"Da `i` in der for-Schleife gesetzt wird, ist das `i=0` unnötig. `i+1` tut sowieso nichts."
Ich dachte mann muss i immer +1 nehmen. Aber das war ein anderes Ding.. Ich erinnere mich jetzt wieder. :(
Peinlich...
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Nichts gegen Deine Lösung. Wenn Dir aber niemand sagt, wie es besser geht, lernst Du auch nichts.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Python gibt es seit 1990 und du behauptest einfach, die math.log10 wäre falsch implementiert?
https://github.com/python/cpython/blob/ ... ule.c#L811

Dann fang mal an mit C aufzuräumen, da math die Funktionen aus der C standard library verwendet.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten