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 1 von 3  1 23      
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#1

Spezielle Festkommazahl?

  Alt 19. Sep 2006, 15:31
Wäre es möglich Delphi ganz spezielle Festkomma-Datentypen beizubringen?

Ich dachte so an 1/2(Vorzeichen) Bit(s) vor dem Komma und 15/14 Bits danach.
Also Wertebereich von 0 bis 1 bzw. von -1 bis +1 bei recht hoher Genauigkeit bei niedrigem Speicherbedarf. Festkomma wegen der schnelleren Verarbeitung.
(Und ich habe nicht vor das ganze Prog in asm zu schreiben )
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 15:36
Du müsstest dir halt einen eigenen schreiben. Ab Delphi 2006 kannst du dafür auch Klassenoperatoren verwenden. Im Prinzip musst du "nur" die Funktionsweise der FPU nachahmen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#3

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 15:39
Hm ok, und wie schreib ich mir den?
Ich hab Delphi 2005.
Und ich müsste nur die ALU nachahmen, Festkommazahlen "sind" doch Integers.
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 15:42
Aargh, Festkommazahl... Ich hab nur das F und das Komma gelesen...

Dann wird das ganze ein bissel einfacher.

Du bekommst aber ein Problem, wenn du deine Zahl mit einem Integer/Cardinal oder einer Gleitkommazahl multiplizieren willst.

Im Prinzip kannst du für deine Zahl auch einfach einen SmallInt nehmen und dann nur die Rechenoperationen und Ausgabeprozeduren anders implementieren.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#5

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 15:48
Gleitkommas sollte es eigentlich nicht geben, Integers schon eher.

Wenn ich nen SmallInt nehm, wie siehts dann aus wenn ich z.B. 1x1 hab? Da steht ja dann im SmallInt 32768 x 32768. Kommt da dann wieder 32768 raus? Wohl nicht, der Windows-Rechner sagt 0.
Drum müsste man da nen neuen Datentyp einführen denk ich mir.
Sonst muss ich ja solche Sachen wie Plus und Minus neu schreiben und zwar als Funktionen. Oder kann man Operatoren definieren?
Zur Ausgabe muss das dann als Genzzahl in ein/zwei Byte(s) gemappt werden.
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 15:53
Nein, das sagte ich bereits. Du musst die Rechenfunktionen anders implementieren.

Am einfachsten ginge das so:

Delphi-Quellcode:
function FixedMul(a, b: SmallInt): SmallInt;
var aex, bex: Extended;
begin
aex:=1/a;
bex:=1/b;
result:=round(1/(aex*bex));
end;

function FixedDiv(a, b: SmallInt): SmallInt;
var aex, bex: Extended;
begin
aex:=1/a;
bex:=1/b;
result:=round(1/(aex/bex));
end;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#7

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 15:58
Ui, da war ich wohl zu langsam mit editen

Ich dachte an den Datentyp weils dann viel schneller zu verarbeiten wäre.
Deine Funktionen sind ja eigentlich ziemlich langsam wegen den vielen Divisionen, Programmsprüngen und Extendeds (die sind ja eigentlich auch Krücken, kein PC kann mit 10 Bytes auf einmal rechnen).

Und fürs Verständnis: Wieso Kehrbrüche?
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 16:29
Îch nehme mal 7F FF soll soviel wie 1 heißen. Also ist 00 01 1/32768.

Und wenn dir das zu langsam ist, kannst du deinen Code ja auch selbst schreiben, mit Binärgefummel. Allerdings wird das garantiert nicht so schnell gehen wie mit einem nativen Datentypen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
r2c2

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

Re: Spezielle Festkommazahl?

  Alt 19. Sep 2006, 17:48
Im Prinzip brauchst du keinen neuen Datentyp. Integers reichen. Allerdings musst du Schiebefaktoren mitspeichern. Also: Mit Integer rechnen und immer n Schiebefaktor mitführen. ggf. noch n shr bzw. shl einbauen und fertig. So wirds jedenfalls bei "richtiger" Festkommarechnung(z.B. aufm DSP) gemacht...

Musst nur eben die versch. Rechenarten beachten:
+, - ==> Schiebefaktor ändert sich nicht
*, / ==> aufpassen

mfg

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

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#10

Re: Spezielle Festkommazahl?

  Alt 20. Sep 2006, 16:22
@3_of_8: Wieso 7F FFh (0111 1111 1111 1111b) als "1" und nicht 80 00h (1000 0000 0000 0000b)?
Wie stellst du dann z.B. 0,5 dar? Oder einfach 1?
Der Kehrbruch von 1 ist bei mir 00 001h und nicht 7F FFh

@r2c2: Der Schiebefaktor wäre ja immer gleich also kann ich den hardcoden.
Nur wenn ich das hin und her-shifte, was passiert dann mit dem Nachkommateil? Der is dann weg wenn ich nicht drauf aufpasse^^.
Und wie muss ich dann mit dem rechnen, ich kann mir das nicht so ganz vorstellen.

Ich dachte halt Festkomma weils schneller zu behandeln ist (Integer) und es keinen 2-Byte-Gleitkommatyp gibt (Speicherbedarf).
Aber ich hab grad festgestellt dass sich selbst mit Single (4 Byte) der Speicherbedarf eigentlich in Grenzen hält.

Ich werds dann mal mit Singles probieren, wenns nicht tut werd ich auf Festkommas zurückkommen.
Singles dürften ja schneller "sein" als Extendeds, die passen ja noch nichtmal in nen 64-Bit Prozzi rein

Ihr dürft natürlich weiterhin gerne versuchen mir das zu erklären
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01: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