Grias eich :) Ich müsste eine Kehrwertbildung in VHDL umsetzen und hatte mir folgendes dazu gedacht: Die Zahl x kann kann ich ähnlich wie bei der Logarithmisierung in Mantisse und Exponent zerlegen: 1/x = 1/M * 1/2^E 1/2^E ist nur simples Bit-schieben. Für den Kehrwert der Mantisse kann ich eine LUT mit z.B. 8Bit verwenden. Ich benötige insgesamt keine Multiplikation und nur einen Tabellenzugriff. Ist recht simpel und schnell umgesetzt. Mene Frage lautet: Weshalb findet man größtenteils iterative Approximationsverfahren nach Newton-Raphson? Ist dieses Verfahren soviel genauer? Oder möchte man sich die LUT sparen? Darür benötigt man Multiplikationen, die teurer als Blockram sind ... Weiß da jemand etwas? Viele Grüße, Mampf
Mampf F. schrieb: > 1/2^E ist nur simples Bit-schieben. Für den Kehrwert der Mantisse kann > ich eine LUT mit z.B. 8Bit verwenden. Ich benötige insgesamt keine > Multiplikation und nur einen Tabellenzugriff. > > Ist recht simpel und schnell umgesetzt. Hängt von der Genauigkeit/Anz.Stellen ab, LUTs sind aber schon ab ein paar Bits zu "klein", besser sind hier die internen RAMs. Mampf F. schrieb: > Mene Frage lautet: Weshalb findet man größtenteils iterative > Approximationsverfahren nach Newton-Raphson? .. ob das wirklich die häufigste Methode ist? Schau mal nach Div-Radix2, Div-Radix-4 oder CORDIC, die werden auch verwendet (statt A/B einfach 1/B).
Mampf F. schrieb: > Ist recht simpel und schnell umgesetzt Und hat wegen der 8 Bit Tabelle gerade mal zweieinhalb signifikante Stellen...
Sigi schrieb: > .. ob das wirklich die häufigste Methode ist? Schau mal > nach Div-Radix2, Div-Radix-4 oder CORDIC, die werden > auch verwendet (statt A/B einfach 1/B). Danke! Ich hatte wohl falsch gesucht und deshalb nichts sinnvolles gefunden :)
Lothar M. schrieb: > Und hat wegen der 8 Bit Tabelle gerade mal zweieinhalb signifikante > Stellen... Nicht unbedingt: der Ausgangswert kann ja wenige Stellen haben aber das Resultat mit wesentlich höherer Genauigkeit in der Tabelle abgespeichert werden.
Das nennt sich umgangssprachlich "schönsaufen". Das holt einen am nächsten Morgen mit einem bösen Kater wieder ein...
Lothar M. schrieb: > Das nennt sich umgangssprachlich "schönsaufen". Das holt einen am > nächsten Morgen mit einem bösen Kater wieder ein... Ich hab nur Werte von 0 bis 1 ... Mit der LUT-Version hatte ich in etwa eine Abweichung von <0,01 vom errechneten Wert her. Prozentual habe ich es nicht ausgerechnet ... Bei 1/0,001 bekam ich 991,irgendwas ... wären auch nur 0,9% :)
Mampf F. schrieb: > Lothar M. schrieb: >> Das nennt sich umgangssprachlich "schönsaufen". Das holt einen am >> nächsten Morgen mit einem bösen Kater wieder ein... 8 Bit rein, 8 Bit raus. > ... Mit der LUT-Version hatte ich in etwa > eine Abweichung von <0,01 vom errechneten Wert her. Prozentual habe ich > es nicht ausgerechnet ... Bei 1/0,001 bekam ich 991,irgendwas ... wären > auch nur 0,9% :) Wie kommst Du mit einer 8Bit-LUT auf "991,irgendwas"? Das geben doch die 8Bit überhaupt nicht her! Vor allem ",irgendwas"! Angenommen, die 1,0 bearbeitest Du als Sonderfall. Angenommen, die 0 bearbeitest Du als Sonderfall. Angenommen, Du kannst hinreichend oft shiften. Somit gehst Du für die 8Bit-LUT immer aus von: (0,1)xxxxxxxx Adressleitungen 8-Bit LUT: 76543210 Somit ist 0,001d: (0,1)00000110b *2**(-9) Somit liegt das Ergebnis zwischen 1b/0,100000000b=10,0b und 1b/0,111111111b=1.00392d Angenommen, "1b/0,100000000b=10,0b" bearbeitest Du als Sonderfall. Somit steht im Ergebnis immer eine 1 vor dem Komma. Somit steht in der LUT (1,)xxxxxxxx. Somit steht für (0,1)00000110b in der LUT (1,)11110100 (1,)11110100b * 2**9 =1111101000b=1000d Mhh...
Lars R. schrieb: > Wie kommst Du mit einer 8Bit-LUT auf "991,irgendwas"? Das geben doch die > 8Bit überhaupt nicht her! Vor allem ",irgendwas"! Oh sorry, das war missverständlich ... Die LUT ist für eine 8Bit Mantisse, d.h. die Tabelle hat 255 Werte, aber die Werte in der Tabelle haben 24Bit. Lars R. schrieb: > Somit steht für (0,1)00000110b in der LUT (1,)11110100 siehe: Mampf F. schrieb: > 1/x = 1/M * 1/2^E > > 1/2^E ist nur simples Bit-schieben. Für den Kehrwert der Mantisse kann > ich eine LUT mit z.B. 8Bit verwenden. Ich benötige insgesamt keine > Multiplikation und nur einen Tabellenzugriff. Genau, ich suche die Mantisse vorher, dann ist die Genauigkeit höher. Beim Logarithmisieren macht man es genauso :)
Lars R. schrieb: > Mampf F. schrieb: >> Lothar M. schrieb: >>> Das nennt sich umgangssprachlich "schönsaufen". Das holt einen am >>> nächsten Morgen mit einem bösen Kater wieder ein... > > 8 Bit rein, 8 Bit raus. Der Kehrwert wird z.B. oft verwendet, um anschliessend mit ihm mehrfach zu multiplizieren. Hier bedeutet ein Mehr an Stellen eine "besseres" Rundungsergebnis. (schmeisst man hier Stellen weg, dann muss man sich das Ergebnis halt Schönsaufen). Mampf F. schrieb: > Oh sorry, das war missverständlich ... Die LUT ist für eine 8Bit > Mantisse, d.h. die Tabelle hat 255 Werte, aber die Werte in der Tabelle > haben 24Bit. Hört sich irgendwie nach FP12, FP16 (z.B. von GPUs verwendet) an. Schau mal im Netz nach, da gibt's zahlreiche Ansätze für schnelles Multipizieren und Dividieren.
Mampf F. schrieb: > Lars R. schrieb: >> Wie kommst Du mit einer 8Bit-LUT auf "991,irgendwas"? Das geben doch die >> 8Bit überhaupt nicht her! Vor allem ",irgendwas"! > > Die LUT ist für eine 8Bit > Mantisse, d.h. die Tabelle hat 255 Werte, aber die Werte in der Tabelle > haben 24Bit. Auf 991,x für 0,001d komme ich dennoch nicht. > Oh sorry, das war missverständlich ... Ich hatte für den Inhalt der LUT eben etwas angenommen.
Sigi schrieb: > Lars R. schrieb: >> Mampf F. schrieb: >>> Lothar M. schrieb: >>>> Das nennt sich umgangssprachlich "schönsaufen". Das holt einen am >>>> nächsten Morgen mit einem bösen Kater wieder ein... >> >> 8 Bit rein, 8 Bit raus. > > Der Kehrwert wird z.B. oft verwendet, um anschliessend > mit ihm mehrfach zu multiplizieren. Hier bedeutet ein > Mehr an Stellen eine "besseres" Rundungsergebnis. > (schmeisst man hier Stellen weg, dann muss man sich > das Ergebnis halt Schönsaufen). Was ist besser? 8 Bit rein, 16 (bzw 17) Bit raus, oder 9 Bit rein, 8 (bzw 9) Bit raus? und 8x24 vs 9x12?
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.