CLI / C ++ Comment stocker plus de 15 chiffres nombre flottant?
-
27-10-2019 - |
Question
Pour un projet scolaire, j'ai un programme simple, qui compare les photos 20x20. J'ai mis 20 photos, puis je mets photo 21, qui est comparé aux éléments existants 20, et apparaît la réponse, quelle photo je l'ai fait insert (ou que l'on est le plus proche). Le problème est, mon professeur voulait que je utilise l'algorithme du plus proche voisin, donc je suis loin à compter de chaque photo. Je suis arrivé travail de tout, mais la chose est, si les photos sont trop similaires, je suis le problème à dire que l'on est plus proche de mon seul. Par exemple, je reçois ces distances avec 2 photos différentes (bien, ils sont presque les mêmes):
0 distance: 1353.07982026191
1 distance: 1353.07982026191
Il est à 15 chiffres déjà, et je suis en utilisant le type de double
. J'ai lu que long double
est le même. Est-il possible « facile » à un nombre de magasins avec plus de 15 chiffres et faire des mathématiques sur eux?
Je compte la distance en utilisant la distance euclidienne
Je juste besoin d'être plus précis, ou des thats limiterai je ne vais pas probablement passer ici, et je dois parler à mon professeur, je ne peux pas comparer ces photos similaires?
La solution
Je pense que vous avez besoin ceci: gmplib.org
Il y a un guide comment installer cette bibliothèque sur ce site aussi.
Et l'article ici sur les flotteurs: http: // gmplib. org / manuel / C_002b_002b-Interface-Floats.html # C_002b_002b-Interface Flotteurs
Autres conseils
Peut-être que vous pourriez utiliser une approche algébrique.
Supposons que vous essayez de calcuate si vecteur x est plus proche de ou b . Ce que vous devez calculer est le signe de
d 2 ( x , a ) - d 2 ( x , b )
Ce qui est (je laisse de côté quelques passages par souci de brièveté)
et
qui ne contient que des différences entre les valeurs qui devraient être très similaires. En sommant sur ces petites valeurs devrait donner une meilleure précision que de travailler sur l'ensemble.