CLI / C ++如何存储超过15位的浮点数?

时间:2011-12-04 01:45:52

标签: c++ visual-studio floating-point c++-cli euclidean-distance

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

0 distance: 1353.07982026191
1 distance: 1353.07982026191

已经是15位,我正在使用double类型。我在读long double是一样的。有没有“简单”的方法来存储超过15位的数字并对它们进行数学处理?

我使用欧几里德距离计算距离 enter image description here 我只需要更加精确,或者那限制我可能不会通过这里,我应该和我的老师谈谈我不能比较这些相似的照片?

2 个答案:

答案 0 :(得分:2)

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

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

这里有关于花车的文章:http://gmplib.org/manual/C_002b_002b-Interface-Floats.html#C_002b_002b-Interface-Floats

答案 1 :(得分:2)

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

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

的符号

d 2 x a ) - d 2 x b

哪个变得(为了简洁,我将省略一些段落)

然后

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