float, double, BigDecimal

miasma

Aktives Mitglied
Hallo,

ich will in einer Baumstruktur mit Pointern zu den Nachbarknoten, zum Vaterknoten und ersten Kindknoten einfach rausfinden können welcher Kindknoten wenn man diese vergleicht jetzt in einem levelorder durchlauf vor dem anderen Knoten kommt.

Dazu dachte ich mir kann ich ja anfänglich ganz einfach numerisch durchnummerieren von 0 bis n. Werden dann Subbäume irgendwo eingefügt, bspw. als erstes Kind vom Vaterknoten so kann ich ja einfach erster Kindknoten falls vorhanden -1 machen, falls nicht 0 zuweisen. Wenn ich ganz rechts einen Kindknoten einfügen will (als letztes Kind) einfach die Zahl vom linken Nachbarknoten nehmen + 1. Wenn ich Kindknoten dazwischen einfügen will dann kann ich ja einfach die Ordnungszahl vom linken nachbarn + rechter Nachbar und durch 2 teilen.

Jetzt zu meiner Frage. Prinzipiell würde es doch reichen dazu eine Variable vom Typ double zu verwenden, aber wahrscheinlich hab ich dann schon Rundungsfehler. Wahrscheinlich wäre deshalb BigDecimal am besten geeignet?

Zudem eine dumme Frage, wie kriege ich eine Byte-Array represäntation von einer BigDecimal Instanz um diese zu serialisieren? Ich nehme mal an irgendwie aufteilen in vor-komma und nach-komma Stellen.

BTW: Nochmal zur eigentlichen Idee, ich will damit einfach bestimmen können welcher Kindknoten wenn man diese vergleicht in der Ordnung oder in einem Levelorder Durchlauf vorher kommt. Momentan nutze ich dazu noch:

Java:
	public int getSiblingPosition() {
		int index = 0;
		while (mNodeReadTrx.hasLeftSibling()) {
			mNodeReadTrx.moveToLeftSibling();
			index++;
		}
		return index;
	}

was natürlich sehr ineffizient ist, weil es sich um eine persistente (also auf Festplatte/Flash-disc gespeicherte) Baumstruktur handelt und somit die Knoten möglicherweise erst in den Hauptspeicher geladen werden müssen. Bei sehr vielen Vergleichen macht das wahrscheinlich einen deutlichen Unterschied, ob ich dann eine relative positionsangabe in den Knoten selbst speichere oder nicht. D.h. der Rückgabewert muss kein int sein. Im Prinzip will ich nur in der Lage sein beim Vergleich dann -1 oder 1 zurückzugeben je nachdem welcher der beiden verglichenen Knoten in der Kindordnung vorher kommt.

Letztendlich habe ich da bisher halt: return p1.getSiblingPosition() - p2.getSiblingPosition();

Viele Grüße,
Johannes
 

Ark

Top Contributor
Was genau willst du denn mit dieser Baumstruktur bezwecken? Also wo und wie soll sie eingesetzt werden? Warum sollte sie genau so sein, wie du sie dir vorstellst?

double und float sind da vollkommen ungeeignet, je nach Ebene kann da ganz schnell z.B. schon nach dem zehnten eingefügten Knoten Schluss sein. Und BigDecimal geht da auch an der Problematik vorbei: Wahrscheinlicher wirst du alle Geschwister eingelesen haben, bevor die BigDecimal-Berechnungen durchgeführt wurden. Und weniger Speicher würde das Einlesen der Geschwister vermutlich auch benötigen.

Ark
 

miasma

Aktives Mitglied
Naja, um die document order Bestimmung für XQuery/XPath-Anfragen zu beschleuningen. In den allermeißten Fällen handelt es sich wohl um Knoten mit dem selben Parent-knoten die verglichen werden müssen (d.h. welcher Knoten in einem preorder-Durchlauf vorher kommen würde). Die meißten XML-Datenbanksysteme weißen deshalb entweder Dewey-/ORDPATH-IDs zu oder verwenden eine pre/post bzw. davon abgeleitete Kodierungsverfahren.

Ich weise die Knoten-IDs zunächst in einem preorder-Durchlauf zu, d.h. die meißten Knoten können mit Hilfe der IDs direkt verglichen werden. Später eingefügte Knoten (es wird einfach immer max-nodeID + 1 als nächstes zugewießen) brechen aber die preorder Nummerierung auf bzw. für genau diese Knoten kann man die nodeIDs dann nicht mehr direkt vergleichen. Prinzipiell suche ich da dann wie in Saxon den lowest common ancestor und muss dann noch schauen welcher der beiden Knoten mit übereinstimmendem Parent-Knoten zuerst kommt.
 

miasma

Aktives Mitglied
BTW: In Saxon hat man bspw. aber die sibling-Position direkt zum Abfragen weil parent-Knoten ein Array mit allen Kindknoten beinhalten.
 

miasma

Aktives Mitglied
Wahrscheinlich könnte man auch eine Art Dewey-/ORDPATH-ID verwenden aber die parent/child Beziehung weglassen, also nur die Kindordnung mit der gleichen Idee abspeichern, hmm (ich will auch moves- und inserts zwischen vater- und kind-Knoten effizient ohne jegliches relabeling unterstützen, deshalb darf in den labels keine parent/child Beziehung drin sein).
 

Bernd Hohmann

Top Contributor
Zudem eine dumme Frage, wie kriege ich eine Byte-Array represäntation von einer BigDecimal Instanz um diese zu serialisieren?

BigDecimal ist direkt serialisierbar (bzw. hat seinen eigenen Wrapper eingebaut).

Wenn Du es als byte-Array haben möchtest, dann über diesen Umweg:

Code:
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(baos);
		oos.writeObject(OBJECT);
		byte buffer[] = baos.toByteArray();
		oos.close();
		baos.close();

Bernd
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
B Variablen Bug of Float. & Double.MIN_VALUE! Allgemeine Java-Themen 4
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
vandread Float/Double probleme bei der Multiplikation?! Allgemeine Java-Themen 3
E int vs. float vs. double Allgemeine Java-Themen 7
G Verständnisproblem double und float Allgemeine Java-Themen 7
W Division mit float und double Allgemeine Java-Themen 2
W float/double verhält sich seltsam Allgemeine Java-Themen 6
Arif Datentypen Float-Rundungsfehler Allgemeine Java-Themen 5
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
RalleYTN float in WORD konvertieren Allgemeine Java-Themen 1
N OctetString --> Float Allgemeine Java-Themen 5
J Datentypen String in Float umwandeln und "umbauen"? Allgemeine Java-Themen 5
N Variablen Gleitkommazahlen - Kleineres float? Allgemeine Java-Themen 11
P Datentypen float mit komma statt punkt möglich? Allgemeine Java-Themen 6
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
Tobse 8 bit float Allgemeine Java-Themen 6
F Float Division - Nachkommastelle bei 0 ausblenden Allgemeine Java-Themen 2
Developer_X "String" in "int" umwandeln, und dann "int" in "float" Allgemeine Java-Themen 8
G String nach Float parsen Allgemeine Java-Themen 2
E hex- Stirng in einen float umwandeln Allgemeine Java-Themen 9
MQue Float- Wert formatieren Allgemeine Java-Themen 8
spacegaier Kommastellen aus float extrahieren Allgemeine Java-Themen 13
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
J Float Formatierung? Allgemeine Java-Themen 6
P string zu float - darstellungsproblem Allgemeine Java-Themen 4
B Umwandeln von Bytes in float Zahl (DataInputStream) Allgemeine Java-Themen 3
R Float richtig in Integer ? Allgemeine Java-Themen 4
N Float zahl auf eine Stelle nach dem Komma runden Allgemeine Java-Themen 3
A Float-Wert auf 2 Stellen nach den Komma runden ? Allgemeine Java-Themen 2
H Multiplikation int*float Allgemeine Java-Themen 2
V Typumwandlung Integer, Float etc in String Allgemeine Java-Themen 4
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
Neumi5694 double Vergleich Allgemeine Java-Themen 19
G Modulo - double Allgemeine Java-Themen 21
ReinerCoder Eclipse Fehlermeldung - The constructor Double(double) is deprecated Allgemeine Java-Themen 8
O Variablen Addition von Double-Werten ergibt seltsame 0.9999999 Zahlen Allgemeine Java-Themen 2
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
VfL_Freak Double mit zwei festen NK-Stellen ausgeben Allgemeine Java-Themen 9
B List<Integer> ist List<Double> ? Allgemeine Java-Themen 6
SkyScreamer Variablen Int umwande in Double/ 1 Miner = 5 Cookies/s Allgemeine Java-Themen 2
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
T Double salted bcrypt Allgemeine Java-Themen 0
A Zahl abgerundet obwohl Double Allgemeine Java-Themen 9
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
Y String to Double ohne ParseDouble Allgemeine Java-Themen 11
D Double aus String auslesen Allgemeine Java-Themen 8
M double Array Allgemeine Java-Themen 8
C String in double[][] konvertieren! Allgemeine Java-Themen 5
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
Zettelkasten Double --> Integer Allgemeine Java-Themen 4
J String mit "," in Double Wert konvertieren Allgemeine Java-Themen 7
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
T ArrayList<double[]> persitent anlegen Allgemeine Java-Themen 7
K double Zufallszahl Allgemeine Java-Themen 6
S String in Double - letztes Zeichen fehlt Allgemeine Java-Themen 4
T int <-> integer, double <-> Double... Allgemeine Java-Themen 2
J Umstellung von double auf BigDecimal Allgemeine Java-Themen 5
H2SO3- String 1.000,00 in double umwandeln Allgemeine Java-Themen 12
S Double-Checked Locking Allgemeine Java-Themen 4
I 2D-Grafik Polygon mit Double Werten zeichnen Allgemeine Java-Themen 4
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
F double auf 2 Nachkommastellen runden Allgemeine Java-Themen 9
D Double to Integer - ist das möglich? Allgemeine Java-Themen 3
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
H2SO3- großen double in string mit e umwandeln Allgemeine Java-Themen 4
T Problem: Double als Geldbetrag - Rundungsfehler Allgemeine Java-Themen 5
P große double Zahlen und modulo Allgemeine Java-Themen 8
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
M größer als double? Allgemeine Java-Themen 4
N Double ohne Wissenschaftliche Schreibweiße Allgemeine Java-Themen 5
M Double Braces Notation um Collections zu initialisieren Allgemeine Java-Themen 9
R Eigene ArrayList vom Typ Short, Integer oder Double Allgemeine Java-Themen 4
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
T XStream.toXML => double mit , anstelle . Allgemeine Java-Themen 3
G Fehler bei Array.getDouble mit Double[] als Argument! Allgemeine Java-Themen 6
A Problem bei Übergabe von Werten in ein double Array. Allgemeine Java-Themen 21
M Double immer mit 2 Kommastellen Allgemeine Java-Themen 3
G double in Date Allgemeine Java-Themen 5
reibi double-Wert auf 2 Stellen nach dem Komma abschneiden Allgemeine Java-Themen 6
G Genauigkeit von Double Allgemeine Java-Themen 2
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
V "double in Exponentialschreibweise" normal ausgebe Allgemeine Java-Themen 2
S List<Double> oder Double[] in double[] zu konvertieren Allgemeine Java-Themen 6
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
T cast Object to Double[] Allgemeine Java-Themen 2
DEvent double von c nach Java Allgemeine Java-Themen 4
K Double-Zahl runden Allgemeine Java-Themen 4
J double 3.0 soll ohne Nachkommastelle ausgegeben werden Allgemeine Java-Themen 12
S Java Double addieren Allgemeine Java-Themen 3
A string zu double Allgemeine Java-Themen 3
T double to object Allgemeine Java-Themen 3
J Große Zahl (double) as text ausgeben? Allgemeine Java-Themen 2
padde479 String in double parsen Allgemeine Java-Themen 6
E double auf int runden, nicht abschneiden Allgemeine Java-Themen 2
G Double Zahl quadrieren Allgemeine Java-Themen 8
C double Zahlen mit drei NachkommaStellen in String umwandeln Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben