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.
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
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.
...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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.