AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spezielle Festkommazahl?

Ein Thema von SnuffMaster23 · begonnen am 19. Sep 2006 · letzter Beitrag vom 23. Sep 2006
Antwort Antwort
Seite 3 von 3     123   
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#21

Re: Spezielle Festkommazahl?

  Alt 23. Sep 2006, 09:58
Hallo Khabarakh,
Zitat:
Festkommatypen haben einfach einen statischen Wertebereich, daran lässt sich nix ändern. Dass 0,25² bei einem Q6.2-Typen (also mit der Auflösung 0,25) im Nirvana verschwindet, liegt in der Natur der Sache. Kann ich diese Einschränkung nicht gebrauchen, greife ich zu Floats.
Du hast mein Argument noch nicht verstanden. Wenn ich keine FPU hab(wie z.B. auf nem DSP) bleibt mir nix anderes übrig, als auf Floats zu verzichten

Zitat:
Dein Typ wiederum macht nach einiger Überlegung - sorry - überhaupt keinen Sinn mehr.
Du musst dich nicht entschuldigen. Wir diskutieren hier über den Sinn und Unsinn unterschiedlicher Umsetzungen von Reelen Zahlen. Und ohne andere Meinungen, gäbs keine Diskussion...

Zitat:
Schon 8² schlägt bei deinem 8-Bit-Beispiel durch einen Überlauf fehl,
Warum?
Delphi-Quellcode:
int1 := 8;
int2 := 8;
Shift := 0;
erg := int1 * int2;
// am Shift-Faktor ändert sich nix, da 0+0=0 ist...
Wo ist der Überlauf?

Zitat:
durch deinen Shiftfaktor werden die festen Fixed-Point-Grenzen unkontrollierbar
unkontrollierbar nicht, aber man muss extrem aufpassen. Da hast du Recht. So zu rechnen is nicht einfach. Wenns aber nicht anders geht(ich erwähne hier mal wieder den DSP), hat man keine andere Wahl.

Zitat:
(eigentlich wohl eher Exponent )
Ich weiß, dass das eigentlich n Exponent is. Trotzdem haben die das Teil in der Firma "Shift-Faktor" genannt. Kann ich nix für...

Zum Verwendungszweck:
- Float: Immer, wenns geht
- Festkomma ohne variablen Shift-Faktor: Mir fällt kein sinnvolles Einsatzgebiet ein
- Festkomma mit variablem Schiebefaktor: wenn keine FPU da is

Letzterer Punkt impliziert zwar schon, dass es unter Delphi, was ja nur unter Win läuft und Win nur mit FPU funktioniert, wenig Sinn macht auf Floats zu verzichten, aber das war ja auch schon gesagt...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#22

Re: Spezielle Festkommazahl?

  Alt 23. Sep 2006, 11:57
Zitat von r2c2:
Hallo Khabarakh,
Zitat:
Festkommatypen haben einfach einen statischen Wertebereich, daran lässt sich nix ändern. Dass 0,25² bei einem Q6.2-Typen (also mit der Auflösung 0,25) im Nirvana verschwindet, liegt in der Natur der Sache. Kann ich diese Einschränkung nicht gebrauchen, greife ich zu Floats.
Du hast mein Argument noch nicht verstanden. Wenn ich keine FPU hab(wie z.B. auf nem DSP) bleibt mir nix anderes übrig, als auf Floats zu verzichten
Du hast mein Argument nicht verstanden: Es gibt nichts anderes (sinnvolles, s.u.) als Fixed Point und Float Point. Habe ich keine FPU, muss ich sie entweder emulieren (was wohl höchstens auf Taschenrechnern verkraftbar wäre) oder Fixed Point benutzen.

Zitat:
Delphi-Quellcode:
int1 := 8;
int2 := 8;
Shift := 0;
erg := int1 * int2;
// am Shift-Faktor ändert sich nix, da 0+0=0 ist...
Wo ist der Überlauf?
(Huppsala, eigentlich meinte ich 4² ^^, was aber irrelevant ist)Ich bezog mich auf dein 0,5-Beispiel, in dem 4 = 000100(,)00 wäre => Peng. Natürlich, mit einer geschickten Wahl des Shiftfaktors lässt sich der Überlauf verhindern, aber mit welchem Algorithmus soll dein Typ diesen am Besten ermitteln? Die Antwort ist schon gefunden: IEEE 754.

Zitat:
unkontrollierbar nicht, aber man muss extrem aufpassen. Da hast du Recht. So zu rechnen is nicht einfach.
Ich möchte es jedenfalls nicht benutzen *g* . Noch ein anderes Beispiel: 0,5.
Ganz egal, welchen Shiftfaktor ich wähle, spätestens nach achtfacher Multiplikation mit 1 (!) ist bei 8-Bit Schicht im Schacht.

Zitat von r2c2:
- Festkomma ohne variablen Shift-Faktor: Mir fällt kein sinnvolles Einsatzgebiet ein
Auch wenn das Sparen der paar Bits pro Variable heutzutage wohl nicht mehr relevant ist, ist diser Thread hier doch ein schönes Beispiel. Bei Fixed Points mit Shift-Faktor und mehr als vier mathematischen Operationen würde Snuffmaster wohl durchdrehen, ich würde es ganz bestimmt .

Es gibt sicher ein paar Anwendungsgebiete für "Shifted Fixed Points", aber da dabei wohl zu jeder Zeit die Anzahl der Operationen, die Wertebereiche aller Argumente bekannt sein müssen, sind die Gebiete imho schon ziemlich eingeschränkt.
Warum sonst sollte ein dem Dreidimensionalem durchaus mächtiger Handheld wie z.B. der Nintendo DS ausschließlich Fixed Point benutzen, wenn sich Grafikprogrammierer am PC eine Welt ohne Floatpoint gar nicht mehr vorstellen können (und ja, die Theorie der Fließkommazahlen steckt tief im Design heutiger PC-Engines)?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#23

Re: Spezielle Festkommazahl?

  Alt 23. Sep 2006, 16:57
Zitat von Khabarakh:
Du hast mein Argument nicht verstanden: Es gibt nichts anderes (sinnvolles, s.u.) als Fixed Point und Float Point. Habe ich keine FPU, muss ich sie entweder emulieren (was wohl höchstens auf Taschenrechnern verkraftbar wäre) oder Fixed Point benutzen.
Ich hab mir das mit dem Shift-Faktor, etc. nicht ausgedacht. Es wird so gemacht(alles unter der Voraussetzung, ich hab das richtig verstanden). Punkt. Und es ist verkraftbar. Wenn auch aufwändig. Das was ich gesehen hab, war grob gesagt, ne Steuerung für n Elektromotor. Wenn ichs noch richtig im Kopf hab, waren das da > 300 C-Files. Und die waren mitunter ganz schön lang... Es *ist* also möglich und *wird* auch gemacht...

Zitat:
(Huppsala, eigentlich meinte ich 4² ^^, was aber irrelevant ist)Ich bezog mich auf dein 0,5-Beispiel, in dem 4 = 000100(,)00 wäre => Peng. Natürlich, mit einer geschickten Wahl des Shiftfaktors lässt sich der Überlauf verhindern, aber mit welchem Algorithmus soll dein Typ diesen am Besten ermitteln?
Und genau diese geschickte Wahl des Shiftfaktors ist es, die andauernd gemacht werden muss. Das versuch ich doch die ganze Zeit zu sagen... Ohne den is es nämlich dein Festkomma ohne variablen Shiftfaktor...

Zitat:
Die Antwort ist schon gefunden: IEEE 754.
N DSP hat keine FPU. Jedenfalls die, mit denen ich zu tun hatte...

Zitat:
Zitat von r2c2:
- Festkomma ohne variablen Shift-Faktor: Mir fällt kein sinnvolles Einsatzgebiet ein
Auch wenn das Sparen der paar Bits pro Variable heutzutage wohl nicht mehr relevant ist, ist diser Thread hier doch ein schönes Beispiel. Bei Fixed Points mit Shift-Faktor und mehr als vier mathematischen Operationen würde Snuffmaster wohl durchdrehen, ich würde es ganz bestimmt .
Ich wahrscheinlich auch. Deshalb programmier ich ja auch für n PC und nicht für n DSP...

Zitat:
Es gibt sicher ein paar Anwendungsgebiete für "Shifted Fixed Points", aber da dabei wohl zu jeder Zeit die Anzahl der Operationen, die Wertebereiche aller Argumente bekannt sein müssen, sind die Gebiete imho schon ziemlich eingeschränkt.
Ich kenn auch nur eins. Das oben genannte. Aber ich kenn eins.

Hier nochmal n Beispiel, warum es sinnvoll ist den Shilftfaktor zu benutzen:
Delphi-Quellcode:
// Voraussetzungen:
// - keine FPU da
// - es ist genau bekannt in welchen Wertebereichen die gemessenen Größen sich befinden
// - es stehen nur 16-Bit-Datentypen zur Verfügung

var
// zur Verdeutlichung SmallInt; man kann also mit 16 Bit rechnen:
  Wert1: SmallInt; // sehr große Zahl; 2^10 bis 2^14;
  Wert2: SmallInt; // sehr kleine Zahl; 2^-9 bis 2^-6
  Erg: SmallInt;
  Shift: SmallInt;
begin
  // Wir wollen beide Werte multiplizieren; Mit Float kein Problem, aber das steht nicht zur Verfügung...
  Wert1 := GetWert1(Sonstwoher); // Wertebereich bekannt. Impliziter Shiftfaktor -10; unser Beispielwert sei 128 * 2^12 = 512 * 2^10(das 10^10 wird implizit gespeichert durch den impliziten Shiftfaktor)
  Wert2 := GetWert2(Sonstwoher); // Wertebereich bekannt. Impliziter Shiftfaktor +10; unser Beispielwert sei 4 * 2^-7 = 8 * 2^-6
  Erg := Wert1 * Wert2; // 128 * 4 = 512
  Shiftfaktor := 4; // 10 - 6 // muss nicht extra gespeichert werden, da er implizit bekannt ist. Wichtig is aber ne gute Dokumentierung
end;
Wir können also damit rechnen. Hätten wir die - impliziten - Shiftfaktoren nicht, gäb es keine Möglichkeit damit zu rechnen, da entweder der große ider der Kleine Wert nicht in die 16Bit passt...

Ich weiß, das is alles ganz anders, als unter Delphi. Und das is nur ein Beispiel. Bei der programmierung für n 16-Bit-DSP gilt nämlich u.a.:
- es gibt nur 16 Bit. fertig
- jede Mikrosekunde zählt
- Division is verboten
- Wer durch Konstanten teilt, wird geteert und gefedert
- Wer durch 2er-Potenzen teilt, wird gevierteilt
- Die bedingten Sprünge(u.a. die berühmt-berüchtigten ifs) werden in den Tartaros verbannt, wo sie tagein tagaus versuchen einen Stein auf einen Hügel... ähm... ne das macht schon Sisyphos... müssen uns also noch ne geeignete Strafe einfallen lassen

So isses also auf m DSP zumindest so ungefär. Die Strafen könnten auch noch härter sein. Bin mir da nicht sicher...

Zitat:
Warum sonst sollte ein dem Dreidimensionalem durchaus mächtiger Handheld wie z.B. der Nintendo DS ausschließlich Fixed Point benutzen, wenn sich Grafikprogrammierer am PC eine Welt ohne Floatpoint gar nicht mehr vorstellen können
Kann ich mir kein Urteil zu erlauben. Hab noch nie so n Viech in der Hand gehabt, geschweige denn den Quelltext...

Zitat:
(und ja, die Theorie der Fließkommazahlen steckt tief im Design heutiger PC-Engines)
Hab ich nie bestritten...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz