log2 mit Assembler programmieren

#1694701
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.
Gast #1694774
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
Persönliche Seite #1696869
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren