1

对于一个学校项目,我有一个简单的程序,可以比较 20x20 的照片。我放了 20 张照片,然后我放了第 21 张照片,与现有的 20 张照片进行比较,然后弹出答案,我插入了哪张照片(或者哪张最相似)。问题是,我的老师要我使用最近邻算法,所以我计算每张照片的距离。我让一切正常,但问题是,如果照片太相似,我很难说哪一张更接近我的那一张。例如,我用 2 张不同的照片得到这些距离(嗯,它们几乎是一样的):

0 distance: 1353.07982026191
1 distance: 1353.07982026191

它已经是 15 位数字了,我正在使用double类型。我读的long double是一样的。是否有任何“简单”的方法来存储超过 15 位数字并对其进行数学运算?

我用欧几里得距离计算距离 在此处输入图像描述 我只需要更精确,否则我可能不会通过这里的限制,我应该和我的老师谈谈我无法比较类似的照片?

4

2 回答 2

2

我认为你需要这个:gmplib.org

还有一个指南如何在这个网站上安装这个库。

这是关于浮动的文章:http: //gmplib.org/manual/C_002b_002b-Interface-Floats.html#C_002b_002b-Interface-Floats

于 2011-12-05T08:08:55.327 回答
2

也许你可以使用代数方法。

让我们假设您正在尝试计算向量x是否更接近ab。你需要计算的是符号

d 2 ( x , a ) - d 2 ( x , b )

变成(为简洁起见,我将省略一些段落)

进而

其中仅包含应该非常相似的值之间的差异。对如此小的值求和应该比在聚合上产生更好的精度。

于 2011-12-05T09:21:37.693 回答