Frage

Für ein Schulprojekt habe ich ein einfaches Programm, das 20x20 Fotos vergleicht. Ich habe 20 Fotos gesetzt, und dann habe ich das 21. Foto gesetzt, das mit vorhandenen 20 verglichen wird, und taucht die Antwort auf, welches Foto ich einfügt habe (oder welches am ähnlichsten ist). Das Problem ist, dass mein Lehrer wollte, dass ich Algorithmus des nächsten Nachbarn verwende, also zähle ich Distanz zu jedem Foto. Ich habe alles zum Laufen, aber die Sache ist, wenn Fotos zu ähnlich sind, habe ich das Problem damit, zu sagen, welches näher an meinem ist. Zum Beispiel bekomme ich diese Entfernungen mit 2 verschiedenen Fotos (na ja, sie sind fast gleich):

0 distance: 1353.07982026191
1 distance: 1353.07982026191

Es sind bereits 15 Ziffern und ich benutze double Typ. Ich habe das gelesen long double ist dasselbe. Gibt es eine "einfache" Möglichkeit, Zahlen mit mehr als 15 Ziffern zu speichern und sich zu erledigen?

Ich zähle den Abstand mit euklidischer Entfernungenter image description hereIch muss nur präziser sein, oder das ist ein Grenzwert, das ich wahrscheinlich nicht hier passieren werde, und ich sollte mit meinem Lehrer sprechen. Ich kann solche ähnlichen Fotos nicht vergleichen?

War es hilfreich?

Lösung

Ich denke, Sie brauchen das: gmplib.org

Es gibt auch eine Anleitung, wie Sie diese Bibliothek auch auf dieser Website installieren.

Und hier ist Artikel über Floats: http://gmplib.org/manual/c_002b_002b-interface-floats.html#c_002b_002b-interface-floats

Andere Tipps

Vielleicht könnten Sie einen algebraischen Ansatz verwenden.

Nehmen wir an, Sie versuchen zu kalkuieren, wenn Vektor x ist näher an a oder b. Was Sie berechnen müssen, ist das Zeichen von

d2(x, a) - d2(x, b)

Was wird (ich werde einige Passagen für Kürze weglassen)

und dann

Dies enthält nur Unterschiede zwischen Werten, die sehr ähnlich sein sollten. Das Summieren über solche kleinen Werte sollte eine bessere Präzision erbringen als im Aggregat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top