Forum: PC-Programmierung log2 mit Assembler programmieren


von Mike D. (mike89)


Lesenswert?

Hallo ich bin Informatik-Student und habe die Aufgabe erhalten den 
logartihmus zur Basis 2 von x mittels der FPU-Rechenops +-*/ und der 
Neagtion zu programmieren. Daher wäre ich dankbar für Hinweise zur 
Vereinfachung des log_2x. Bisher sind mir folgende Tranformationen 
bekannt:
log_2(x) = log_10(x)/log_10(2)
log_2(x)= y <=> x = 2^y
Ein Hinweis zur Aufgabe sagt man solle table-lookups verwenden oder 
Reihenentwicklungen.
x ist float mit standart 1 bit sign 8 bit exp 23 bit mantisse zur basis 
2 mit bias 127. Für Tipps bzw Code mit ähnlicher Thematik(z.B. log_10 in 
Assembler) wäre ich sehr dankbar.

von D. I. (Gast)


Lesenswert?

Taylor-Reihenentwicklung, siehe Bronstein für die richtige

von Flo (Gast)


Lesenswert?

Oder in ner Schleife immer durch zwei teilen und die Anzahl zählen, bis 
ein Ergebnis kleiner 1 rauskommt:

z.B. 18
18 / 2 = 9    /1
9 / 2 = 4.5   /2
4.5 / 2 = 2.25 /3
2.25 / 2 = 1.125 /4
1.25 / 2 < 1     /also ungefähr 4

Wenn du ohne Nachkommastellen beim Exponent leben kannst, ist das ne 
Idee.
;D

von Purzel H. (hacky)


Lesenswert?


von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Mike Do schrieb:

> Ein Hinweis zur Aufgabe sagt man solle table-lookups verwenden oder
> Reihenentwicklungen.

Bei Tabellen beisst sich die Katz in den Schwanz, denn irgendwo muss die 
Tabelle ja herkommen ;-)

Reihenentwicklung ist nicht so sinnig ohne sich vorher Gedanken über das 
Konvergenzverhalten gemacht zu haben... Besser geht dann der Area 
Tangens Hyperbolicus:
   http://de.wikipedia.org/wiki/Logarithmus#Berechnung_des_Logarithmus

Sehr reizvoll ist auch die Berechnung über die einzelnen Binärziffern, 
das sind selbst in Assembler nur ein paar Zeilen.

Dritte Möglichkeit mit praktischer Relevanz wäre ein hyperbolischer 
CORDIC:
   http://de.wikipedia.org/wiki/CORDIC#Hyperbolische_Modi
Aber auch da geht ln via atanh.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

...und viertens geht ln mit BKM, ist was leichter durchzusteigen als 
durch CORDIC:
   http://de.wikipedia.org/wiki/Bitalgorithmen#Logarithmusfunktion

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.