CLI/C ++ Wie speichern Sie mehr als 15 -stellige Float -Nummer?
-
27-10-2019 - |
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 EntfernungIch 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?
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.