<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Hashfunktion für Doubles: Verständnis Eindeutigkeit]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Hashfunktion die mir für eine Reihenfolge von double-werten einen schlüssel berechnet. Dabei spielt die Reihenfolge der double-werte ebenfalls eine rolle.<br />
Meine Schlüssel sind 32 Bit lang.</p>
<p>Beispiel:</p>
<pre><code>[0.0, 1.2, 0.0, 0.0]
[0.0, 0.0, 1.2, 0.0]
[0.0, 1.2]
</code></pre>
<p>ergeben alle unterschiedliche schlüssel. Also sowohl der Wert des doubles als auch seine Position werden miteinbezogen. Dies mache ich durch einfaches durchmischen mit einem zwischenwert.</p>
<p>Also für jeden double wird ein schlüssel berechnet, dann durchgemischt und dann ein neuer schlüssel des nächsten doubles hinzugerechnet und wieder durchgemischt...das funktioniert auch wunderbar - die schlüssel sind weitgehend kollisionsfrei (glaube ich zumindest).</p>
<p>Frage:<br />
Der wertebereich ist im rechner natürlich beschränkt. Laufe ich denn trotzdem nicht gefahr Kollisionen zu bekommen?</p>
<p>Wäre folgender Ansatz eine weitere Verbesserung:?<br />
Wenn ich folgende Vektoren habe</p>
<pre><code>[0.0, 0.0, 3.9999999999999999999999999999999999999999998, 0.0]
[0.0, 0.0, 4.0, 0.0]
</code></pre>
<p>also die 3.99...89 gerade noch darstellbar ist.<br />
KÖnnte ich eine Prüfung so machen dass ich die beiden ergebnisschlüssel der vektoren bitweise miteinander vergleiche?</p>
<p>Hilft das überhaupt was?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220892/hashfunktion-für-doubles-verständnis-eindeutigkeit</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 12:12:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220892.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Aug 2008 12:26:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hashfunktion für Doubles: Verständnis Eindeutigkeit on Fri, 22 Aug 2008 12:26:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Hashfunktion die mir für eine Reihenfolge von double-werten einen schlüssel berechnet. Dabei spielt die Reihenfolge der double-werte ebenfalls eine rolle.<br />
Meine Schlüssel sind 32 Bit lang.</p>
<p>Beispiel:</p>
<pre><code>[0.0, 1.2, 0.0, 0.0]
[0.0, 0.0, 1.2, 0.0]
[0.0, 1.2]
</code></pre>
<p>ergeben alle unterschiedliche schlüssel. Also sowohl der Wert des doubles als auch seine Position werden miteinbezogen. Dies mache ich durch einfaches durchmischen mit einem zwischenwert.</p>
<p>Also für jeden double wird ein schlüssel berechnet, dann durchgemischt und dann ein neuer schlüssel des nächsten doubles hinzugerechnet und wieder durchgemischt...das funktioniert auch wunderbar - die schlüssel sind weitgehend kollisionsfrei (glaube ich zumindest).</p>
<p>Frage:<br />
Der wertebereich ist im rechner natürlich beschränkt. Laufe ich denn trotzdem nicht gefahr Kollisionen zu bekommen?</p>
<p>Wäre folgender Ansatz eine weitere Verbesserung:?<br />
Wenn ich folgende Vektoren habe</p>
<pre><code>[0.0, 0.0, 3.9999999999999999999999999999999999999999998, 0.0]
[0.0, 0.0, 4.0, 0.0]
</code></pre>
<p>also die 3.99...89 gerade noch darstellbar ist.<br />
KÖnnte ich eine Prüfung so machen dass ich die beiden ergebnisschlüssel der vektoren bitweise miteinander vergleiche?</p>
<p>Hilft das überhaupt was?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569590</guid><dc:creator><![CDATA[Adelholzener]]></dc:creator><pubDate>Fri, 22 Aug 2008 12:26:19 GMT</pubDate></item><item><title><![CDATA[Reply to Hashfunktion für Doubles: Verständnis Eindeutigkeit on Fri, 22 Aug 2008 12:38:33 GMT]]></title><description><![CDATA[<p>Ich meinte die Prüfung am Ende anders:</p>
<p>Könnte ich so prüfen dass falls ich 2 identische Schlüssel habe ich dann die Vektoren bitweise teste ob sie identisch sind? Reicht mir das dann als &quot;eindeutiges&quot; Kriterium?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569601</guid><dc:creator><![CDATA[Adelholzener]]></dc:creator><pubDate>Fri, 22 Aug 2008 12:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to Hashfunktion für Doubles: Verständnis Eindeutigkeit on Fri, 22 Aug 2008 13:02:10 GMT]]></title><description><![CDATA[<p>Wieso meinst du bitweise? Überprüfe doch normal mit <code>operator==</code> auf Gleichheit. Bei Fliesskommazahlen wie <code>double</code> musst du allerdings aufpassen, falls du mit denen rechnest und wieder zurückrechnest, sind sie womöglich nicht mehr gleich. Für eindeutige Schlüssel würde ich daher eher zu ganzen Zahlen raten, die können eindeutig und genau dargestellt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569616</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 22 Aug 2008 13:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to Hashfunktion für Doubles: Verständnis Eindeutigkeit on Fri, 22 Aug 2008 13:27:15 GMT]]></title><description><![CDATA[<p>du hast natürlich recht und so mache ich es auch - ich berechne mir ganzzahlige schlüssel aus den double-vektoren.</p>
<p>Doch es kann doch vorkommen dass 2 Schlüssel identisch sind - also eine kollision aufgetreten ist.</p>
<p>Würde es hier jetzt sinn machen zuerst die einzelnen double-werte miteinander zu vergleichen? Das geht ja auch nur bis auf eine gewisse epsilon-toleranz also sowas:</p>
<p>if (abs(0.9999 - 1.0) &lt; 1e-15) dann gleich.</p>
<p>Das ist doch aber blödsinn weil damit liefere ich mir doch selbst wieder nur eine approximation und damit im grunde eine kollision wo vielleicht keine ist...</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569635</guid><dc:creator><![CDATA[Adelholzener]]></dc:creator><pubDate>Fri, 22 Aug 2008 13:27:15 GMT</pubDate></item><item><title><![CDATA[Reply to Hashfunktion für Doubles: Verständnis Eindeutigkeit on Fri, 22 Aug 2008 13:49:45 GMT]]></title><description><![CDATA[<p>Adelholzener schrieb:</p>
<blockquote>
<p>Doch es kann doch vorkommen dass 2 Schlüssel identisch sind - also eine kollision aufgetreten ist.</p>
<p>Würde es hier jetzt sinn machen zuerst die einzelnen double-werte miteinander zu vergleichen?</p>
</blockquote>
<p>Wie willst du denn dadurch verhindern, dass trotzdem gleiche Schlüssel entstehen können?</p>
<p>Ist dein Schlüssel-Generierungs-Algorithmus gefährdet, Kollisionen zu erzeugen? Ich würde das mal ausführlich testen. Und sonst kommst du wahrscheinlich nicht darum herum, den Algorithmus zu ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1569652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1569652</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 22 Aug 2008 13:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Hashfunktion für Doubles: Verständnis Eindeutigkeit on Mon, 25 Aug 2008 14:48:05 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie willst du denn dadurch verhindern, dass trotzdem gleiche Schlüssel entstehen können?</p>
</blockquote>
<p>vollständig verhindern kann ich es natürlich nicht - sonst hätte ich ja eine möglichkeit gefunden kollisionen beim hash zu umgehen. Aber die wahrscheinlichkeit für eine Kollision kann ich dann reduzieren.</p>
<blockquote>
<p>Ist dein Schlüssel-Generierungs-Algorithmus gefährdet, Kollisionen zu erzeugen?</p>
</blockquote>
<p>Gefährdet ist jeder Schlüssel-Generierungs-Algorithmus (vielleicht fast jeder).Es kamen bisher keine Kollisionen vor - das zu testen ist aber auch fast unmöglich. Es kann immer einen input geben wo Kollisionen auftreten. Ich will die Wahrscheinlichkeit einfach minimieren. Deswgen die frage.</p>
<p>Wie gesagt ist die Idee folgende:<br />
Ich baue mir aus einem double-vektor einen ganzzahligen Schlüssel auf. Wenn jetzt 2 Schlüssel identisch sind prüfe ich in einem 2ten schritt die einzelnen double-werte des vektors bis auf eine epsilon-toleranz.<br />
Bringt das überhaupt was? Bzw. kann ich dadurch die Wahrscheinlichkeit weiter verringern in eine Kollision zu kommen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1571158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1571158</guid><dc:creator><![CDATA[Adelholzener]]></dc:creator><pubDate>Mon, 25 Aug 2008 14:48:05 GMT</pubDate></item></channel></rss>