Logarithmus zur Basis 2
Logarithmus zur Basis 2
Hallo,
kennt jemand eine Userlib oder irgendeinen weg, einen Logarithmus mit einer beliebigen Basis auszurechnen?
Mir würde es speziell um den Logarithmus dualis (Basis=2) gehen.
thx,
kennt jemand eine Userlib oder irgendeinen weg, einen Logarithmus mit einer beliebigen Basis auszurechnen?
Mir würde es speziell um den Logarithmus dualis (Basis=2) gehen.
thx,
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ermn schau mal in eine mathe formelsammlung und in wiki und so...
soweit ich mich entsinne war
Logarithmus [Basis] (Wert) = LogarithmusNaturalis (Wert) / LogarithmusNaturalis (Basis)
oder so ähnlich...
aber man kann auf jeden fall mit zwei anwendungen des naturalis den logarithmus zu einer beliebigen basis berechnen.
... aber eventuell gubts den zur Basis Zwo auch fest in der FPU verankert, weil dort ja alles mit Basis Zwo abläuft...
soweit ich mich entsinne war
Logarithmus [Basis] (Wert) = LogarithmusNaturalis (Wert) / LogarithmusNaturalis (Basis)
oder so ähnlich...
aber man kann auf jeden fall mit zwei anwendungen des naturalis den logarithmus zu einer beliebigen basis berechnen.
... aber eventuell gubts den zur Basis Zwo auch fest in der FPU verankert, weil dort ja alles mit Basis Zwo abläuft...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Code: Alles auswählen
Macro LogX(Value, Expo)
Log(Value)/Log(Expo)
EndMacro
Debug LogX(1024, 2)
Debug LogX(27, 3)
Pow(2, 10) = 1024
zu
1<<10 = 1024
machen kann, das auch anders rum machne könnte ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Was Du "Expo" nennst wird üblicherweise als "Basis" bezeichnet. Das Ergebnis ist der Exponent (= Logarithmus).STARGÅTE hat geschrieben:Code: Alles auswählen
Macro LogX(Value, Expo) Log(Value)/Log(Expo) EndMacro
Also etwas besser so:
Code: Alles auswählen
Macro LogX(Value, Basis)
Log(Value)/Log(Basis)
EndMacro
- Value > 0
- Basis > 0 und Basis <> 1
Gruß, Little John
Indem du das höchste gesetzte Bit findest. Wie du das dann programmieren willst weiß ich nichtSTARGÅTE hat geschrieben:ich überlege auch gerade ob man wieCode: Alles auswählen
Macro LogX(Value, Expo) Log(Value)/Log(Expo) EndMacro Debug LogX(1024, 2) Debug LogX(27, 3)
Pow(2, 10) = 1024
zu
1<<10 = 1024
machen kann, das auch anders rum machne könnte ...

So kann man das höchste gesetzte Bit einer Integer-Zahl ermitteln (PB 4.20):
(Vielleicht geht BitScanReverse() noch einfacher, ich habe noch nicht so viel Erfahrung mit der Verwendung von Assembler in PB.)
Wie man sieht, liefert das aber nur manchmal den Logarithmus zur Basis 2 (Beispiel 1), generell funktioniert das nicht (Beispiel 2).
Gruß, Little John
Code: Alles auswählen
EnableExplicit
Procedure.i BitScanReverse (value)
; liefert die Nummer des höchsten gesetzten Bits in 'value'
; (geht vielleicht noch einfacher)
Protected result
! mov eax, -1
! bsr eax, dword [p.v_value]
! mov dword [p.v_result], eax
ProcedureReturn result
EndProcedure
Macro LogX(Value, Basis)
Log(Value)/Log(Basis)
EndMacro
;-- Beispiel 1
Debug BitScanReverse(8)
Debug LogX(8, 2)
;-- Beispiel 2
Debug BitScanReverse(10)
Debug LogX(10, 2)
Wie man sieht, liefert das aber nur manchmal den Logarithmus zur Basis 2 (Beispiel 1), generell funktioniert das nicht (Beispiel 2).
Gruß, Little John
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02