![]() |
Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bit?
Moin moin,
in WDS möchte ich versuchen soviel Information wie möglich in so wenige Bits wie möglich zu quetschen. Nun ist es so, daß in der Praxis weit weniger Dateien die adressierbare Dateigröße von rund 4 GiB überschreiten. Es gibt aber eben auch diese Fälle. Da ich für jede Datei Informationen im Speicher halten muß, böte es sich an beim Typ der für das Vorhalten der Dateigröße benutzt wird einzusparen. WDS ist zwar in C++ geschrieben, aber das spielt ja keine Rolle, da wir auch hier über Gleitkommazahlen nach IEEE sprechen. Ist mir also absolut egal ob ihr die Delphitypen für Gleitkommazahlen oder die C/C++-Typen in euren Antworten benutzt :zwinker: Es gäbe nun mehrere Szenarien:
So, und jetzt meine Frage. Sind die ersten beiden Szenarien überhaupt machbar? Die Frage zielt darauf ab, ob die Genauigkeit der 32bit Gleitkommazahl eine Genauigkeit bietet die groß genug ist um später beim Runden in eine Ganzzahl korrekt die Werte darzustellen die man mit Ganzzahlen bis 64bit ohne Probleme darstellen kann. Nach meinen Berechnungen soweit könnte es klappen, aber die Genauigkeit bei Gleitkommazahlen ist so eine Wissenschaft für sich. Daher wollte ich gern eure Meinung einholen. Danke schonmal für's Lesen. NB: Effizienz ist insofern irrelevant als der Flaschenhals derzeit ohnehin die Festplatten- und Dateisystemgeschwindigkeit sind. Abgesehen davon geht es allein um die Speicherung und das Extrahieren der Zahl mittels Rundung auf eine Ganzzahl - Berechnungen werden nach wie vor mit Ganzzahlen vorgenommen. |
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
|
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Zitat:
![]() Zitat:
EBML sieht gut aus, zielt wohl aber mehr auf die eigentliche Speicherung auf Festplatten usw. ab. |
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Zitat:
Edit: Roter Kasten funktioniert nicht... |
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Zitat:
Zitat:
Außerdem werden auch bei Gleitkommazahlen keine Bits "eingespart". Man erkauft sich die geringere Größe eben durch geringere Genauigkeit. Du kannst mit einer Gleitkommazahl nicht mehr Stellen speichern als mit einer Festkommazahl, nur größere Wertebereiche abdecken. In einer 32Bit-Gleitkommazahl kannst du also niemals alle Werte speichern, die in einen 64-Bit-Integer-Wert passen. Genauergesagt sogar weniger als in einem 32-Bit-Integer, da für den Exponenten ja auch noch mal Platz draufgeht. Da wäre es noch eine "genauere" Lösung einen 32-Bit-Integer zu nehmen und den Inhalt beim Anzeigen mit dem Faktor 2 zu multiplizieren. Würde nur bei kleineren Dateien stärker auffallen - dafür wären die Ungenauigkeiten bei großen Dateien mit Gleitkommazahlen noch höher. |
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Zitat:
Selbst bei CPUs schummeln die Hersteller ja ;) Also danke erstmal für deinen Kommentar. Ich warte mal ob vielleicht noch jemand eine kreative Idee hat. Und das mit dem "mehr Speichern" ist so eine Sache. Wenn du "Programming Pearls" von Jon Bentley gelesen hast, weißt du was ich meine. Ansonsten kann ich nur empfehlen daß du dir dieses Buch auf dem Wunschzettel für Geburtstag oder Weihnachten vormerkst. Zitat:
|
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Angenommen 99% der Dateien liegen unter 2 GiB (also 31 Bit), könnte man Bit 32 (signed) als Indikator für erweiterte Daten zur Dateigröße verwenden (ein angehängter 64 Bit Wert). Bei 1% dann 96 Bit, beim Rest 32 Bit gespart
€: Sehe gerade, Dein eigener Vorschlag 3)... der wird wohl am sinnvollsten sein. |
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Zitat:
Es gäbe ja sogar noch eine Variation von Nummer 3 die ohne extra Bit auskommt. Ich könnte eine abstrakte Basisklasse deklarieren und dann in der Implementation entweder eine 32bit oder 64bit Ganzzahl verwenden. Da ja alle Funktionen auf den Accessor zugreifen würden, könnte das funktionieren. Muß ich mir aber noch angucken, nicht daß mir dann die Vererbung extra Kosten draufschlägt :mrgreen: |
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Zitat:
€: Schlechter Satzbau in Post #7, denke Du hast es als 96 Bit gespart gelesen, so hatte ich das nicht gemeint. |
AW: Nochmal Gleitkommazahlen, 32bit Float geeignet für Ganzzahlendarstellung bis 64bi
Zitat:
Aber ihr beide habt mich auf eine andere Idee gebracht. Sozusagen ganz im Sinne von Jon Bentley's "Programming Pearls". Also schonmal danke. Mal sehen wieviel Einsparung ich hinbekomme ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz