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:
oder, mit einem beliebigen "Faktor der Verschschiebung"
f
Bei der Addition/Subtraktion zweier Zahlen
x1 und
x2 mit
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:
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