AGB  ·  Datenschutz  ·  Impressum  







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

Passender Variablen-Typ gesucht

Ein Thema von Nikolas · begonnen am 26. Dez 2004 · letzter Beitrag vom 29. Dez 2004
Antwort Antwort
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

Passender Variablen-Typ gesucht

  Alt 26. Dez 2004, 18:15
Ich will in einem Projekt recht viele (~ 50. - 100.000) Punkte im R² speichern und bearbeiten, d.h. lesen und ein paar Berechnungen durchführen. Da ich leider für meine aktuelle Idee jeden Punkt sehr oft auslesen muss, suche ich jetzt nach dem besten Datentyp dafür. Mir kommst da hauptsächlich auf die Leseperformance und den Speicherverbrauch an. Da ich jetzt nicht weiss, ob es teilweise schneller geht, einen Integer-Typ zu nehmen und die letzten paar Stellen als Nachkommastellen anzusehen, wollte ich hier mal fragen, ob da schon jemand Tests gemacht hat.

Vielen Dank
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#2

Re: Passender Variablen-Typ gesucht

  Alt 26. Dez 2004, 19:59
Du hast wenig Auswahl: Wenn du Ganzzahlen willst, nimmst du Integer, wenn du Fließkommazahlen willst, nimmst du Single. Beides sind 32-Bit-Typen, 100.000 Variablen belegen also rund 400 KB im Speicher.
Du könntest einen 16-Bit-Typ nehmen um die Hälfte an Speicher zu belegen, aber ein Prozessor rechnet lieber mit 32-Bit-Werten als mit 16-Bit-Werten.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Passender Variablen-Typ gesucht

  Alt 26. Dez 2004, 20:08
Moin Toxman,

welchen Wertebereich, und welche Genauigkeit willst/musst Du abdecken?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Passender Variablen-Typ gesucht

  Alt 27. Dez 2004, 01:15
\\edit: Nö, habbich mich vertan... sorry
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Passender Variablen-Typ gesucht

  Alt 28. Dez 2004, 20:25
@ Christian:

Die Werte werden wahrscheinlich nicht größer als 1.000.000 und als Genauigkeit sollten 3-4 Nachkommastellen gut ausreichen.

Vielen Dank schonmal.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Passender Variablen-Typ gesucht

  Alt 29. Dez 2004, 02:55
Moin Toxman,

bei 3 Nachkommastellen, solltest Du mit integer klarkommen, bei 4 dann eben mit int64.
Nur nicht vergessen, dass die letzten Ziffern als Nachkommastellen anzusehen sind
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Passender Variablen-Typ gesucht

  Alt 29. Dez 2004, 12:27
Bei diesem Ansatz, also dem "gedanklichen Verschieben" von Zahlenbereichen, musst Du allerdings bei arithmetischen Operationen Vorsicht walten lassen: Stellest Du Dir, wie von Christian beschrieben, eine Zahl n so vor, dass die letzten 3 Stellen (dezimal) als Nachkommastellen der darzustellenden Zahl [i9x[/i] interpretiert werden, gilt demnach Formal:
Code:
 n = x * 1000
oder, mit einem beliebigen "Faktor der Verschschiebung" f
Code:
 n = x * f
Bei der Addition/Subtraktion zweier Zahlen x1 und x2 mit
Code:
 x1 + x2 = x
 x1 - x2 = x
gilt
Code:
 x1*f + x2*f = f * (x1+x2) = f * x = n
 x1*f - x2*f = f * (x1-x2) = f * x = n
so dass Du bei der diesen Operationen keine besonderen Maßnahmen ergreiben musst.
Anders sieht dies aus, wenn Du zB multiplizierst oder dividierst:
Code:
 x1 * x2 = x
 x1 / x2 = x
wird zu
Code:
 (x1*f) * (x2*f) = f² * (x1*x2) = f*n
 (x1*f) / (x2*f) = x1/x2         = n/f
so dass das Ergebnis anschließend (oder für eine höhere Genauigkeit ggf auch vorher) korrigiert werden muss!

Ist denn der Speicherbedarf tatsächlich das Problem, wenn Du mit 100.000 Double-Werten im R² arbeitest, sollten das ein Datenaufkommen von
Code:
 100.000*SizeOf(Double)*2 < 2MB
verursachen. Durch eine Abbildung mit dem Typ Integer gewinnst Du dabei lediglich Speicher um den Faktor 2. Interessant könnten Datenstrukturen wir QuadTrees oder Bäume i.A. sein, die je nach anschließender Verarbeitung nicht nur einen Vorteil in Sachen Performance mit sich bringen sollten sondern darüber hinaus auch Cluster abbilden könnten, deren Punktemenge ihrerseits in einem relativen Koordinatenbereich mit einem kleineren Intervall (zB [-2^15..2^15[ oder [-2^7..2^7[) liegen. Dann könntest Du zu Punkten jeweils diese relative Differenz ablegen und je nach Verteilung Deiner Punkte den Speicherbedarf dramatisch reduzieren...

Ich hoffe, Dir mit diesen unvollständigen Gedanken ein paar Möglichkeiten aufzeigen zu können
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Passender Variablen-Typ gesucht

  Alt 29. Dez 2004, 14:59
Vielen Dank, ich glaub, damit komm ich erstmal hin.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:48 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