Binärer, dualer Logarithmus (Logarithmus zur Basis 2) berechnen --> Lösung!

mcb

Level-2
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Lösung:

2^x = 64 | ln
ln (2^x ) = ln (64) | Rechenregel: ln(2^x) --> x * ln(2)
x * ln(2) = ln (64) | : ln(2)
x = ln(64) / ln (2)
x = 6

Das ganze geht auch mit der "log" Funktion anstatt mit der "ln" Funktion (falls man keine "ln" Funktion hat).

Hintergrund:
Hatte das Problem, das ich wissen musste wieviele Bit das Ergebniss einer Multiplikation benötigt/belegt.
Es hat mich schon öfters geärgert, damit es keine Funktion für "binärer Logarithmus" bei Step7 gibt, oder ich sie einfach nicht kenne?
Hatte hier auf der Seite unter dem Link einen Ansatz gefunden, diesen jedoch nicht verstanden und konnte ihn daher auch nicht in "Code" umsetzen. Ein Kollege hat mir dann mit dem Matheteil geholfen und hat die oben genannte Herleitung auf der Seite: "Gute Frage" von "psychironiker" gefunden, vielen Dank hierfür!
 
Man kann jeden Logarithmus mittels LN darstellen.

(a)LOG(x) = ln(x) / ln(a)

Also logarithmus zur Basis a. a und x müssen relativ und > 0 sein.


Edit: muss zugeben, dass die Info im Internet gar nicht so leicht zu finden ist. Find das Schlimm.
Ein Beispiel im Kapitel

Zusammenhang dekadischer Logarithmus und natürlicher Logarithmus

auf https://www.maths2mind.com/schluesselwoerter/logarithmen-mit-beliebiger-basis
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Das Thema hat mir gefallen, also habe ich gleich einen Baustein dazu gemacht.
Allerdings braucht bei mir 64 bereits das 7. Bit ;)


PHP:
FUNCTION "BitsUsedInDint" : Void
TITLE = BitsUsedInDint
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : funkey
VERSION : 0.1
//BitsUsedInDint
   VAR_INPUT
      Number : DInt;
   END_VAR

   VAR_OUTPUT
      Result : Int;
   END_VAR


BEGIN
    IF #Number > 0 THEN
        #Result := REAL_TO_INT(FLOOR(LN(#Number) / LN(2))) + 1;
    ELSE
        #Result := 0;
    END_IF;
    
END_FUNCTION
 
Zurück
Oben