1

Pour un projet d'école, j'ai un programme simple, qui compare 20x20 photos. J'ai mis 20 photos, et ensuite j'ai mis la 21ème photo, qui est comparée à la 20 existante, et affiche la réponse, quelle photo j'ai insérée (ou laquelle est la plus similaire). Le problème est, mon professeur voulait que j'utilise l'algorithme du plus proche voisin, donc je compte la distance de chaque photo. J'ai tout fonctionné, mais la chose est, si les photos sont trop similaires, j'ai eu le problème de dire lequel est le plus proche de mon. Par exemple, je reçois ces distances avec 2 photos différentes (bien, ils sont presque les mêmes):CLI/C++ Comment mémoriser plus de 15 chiffres?

0 distance: 1353.07982026191 
1 distance: 1353.07982026191 

Il est 15 chiffres déjà, et je suis en utilisant le type double. Je lisais que long double est le même. Y a-t-il un moyen "facile" de stocker des nombres de plus de 15 chiffres et de faire des calculs sur eux?

je compte la distance en utilisant la distance euclidienne enter image description here J'ai juste besoin d'être plus précis, ou des thats limiterai je passe probablement pas ici, et je devrais parler à mon professeur, je ne peux pas comparer ces photos similaires?

+0

Vous n'avez pas besoin de prendre la racine carrée, car vous pouvez simplement comparer les différences au carré, pour la même réponse. Aussi vous n'avez sûrement pas besoin de plus de 15 figures significatives ici: si deux images sont pareilles à cette précision, traitez-les comme si elles sont proches. – TonyK

Répondre

2

Peut-être que vous pourriez utiliser une approche algébrique.

Supposons que vous essayez de calcuate si vecteur x est plus proche de un ou b. Ce que vous devez calculer est le signe de

d (x, un) - d (x, b)

qui devient (je vais omettre certains passages par souci de brièveté)

puis

qui ne contient que des différences entre les valeurs qui devraient être très similaires. Résumer ces petites valeurs devrait donner une meilleure précision que de travailler sur l'agrégat.

+0

Une remarque sur ma dernière remarque: vous ajoutez en fait deux nombres de même amplitude (-> pas de perte de précision), et multipliez par une plus petite (-> pas de perte de précision sur les machines utilisant la représentation IEEE). –

Questions connexes