Question

For a school project, I have a simple program, which compares 20x20 photos. I put 20 photos, and then i put 21th photo, which is compared to existing 20, and pops up the answer, which photo i did insert (or which one is most similar). The problem is, my teacher wanted me to use nearest neighbour algorithm, so i am counting distance from every photo. I got everything working, but the thing is, if photos are too similar, i got the problem with saying which one is closer to my one. For example i get these distances with 2 different photos (well, they are ALMOST the same):

0 distance: 1353.07982026191
1 distance: 1353.07982026191

It is 15 digits already, and i am using double type. I was reading that long double is the same. Is there any "easy" way to store numbers with more than 15 digits and do math on them?

I count distance using Euclidean distance enter image description here I just need to be more precise, or thats limit i probably wont pass here, and i should talk to my teacher i cant compare such similar photos?

Was it helpful?

Solution

I think you need this: gmplib.org

There's a guide how to install this library on this site too.

And here's article about floats: http://gmplib.org/manual/C_002b_002b-Interface-Floats.html#C_002b_002b-Interface-Floats

OTHER TIPS

Maybe you could use an algebraic approach.

Let us assume that you are trying to calcuate if vector x is closer to a or b. What you need to calculate is the sign of

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

Which becomes (I'll omit some passages for brevity)

and then

Which only contains differences between values which should be very similar. Summing over such small values should yield a better precision than working on the aggregate.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top