Thema: Delphi Spezielle Festkommazahl?

Einzelnen Beitrag anzeigen

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