1

학교 프로젝트의 경우 20x20 사진을 비교하는 간단한 프로그램이 있습니다. 저는 20 장의 사진을 넣은 다음 21 장의 사진을 넣어 기존의 20 장과 비교해 보았습니다. 삽입 한 사진 (또는 어느 사진이 가장 비슷합니까?)을 대답으로 나타냅니다. 문제는 선생님이 가장 가까운 이웃 알고리즘을 사용하기를 원했기 때문에 모든 사진에서 거리를 계산하고 있습니다. 나는 모든 것을 작동시키지 만 문제는 사진이 너무 유사하다면 어떤 사진이 내 사진에 더 가깝습니까? 예를 들어 나는 2 개 개의 다른 사진 (물론, 그들은 거의 동일)와이 거리를 얻을 :CLI/C++ 15 자리 이상의 부동 소수점을 저장하는 방법은 무엇입니까?

0 distance: 1353.07982026191 
1 distance: 1353.07982026191 

그것은 이미 15 자리 숫자를, 그리고 난 double 유형을 사용하고 있습니다. 나는 그 long double가 동일하다는 것을 읽고 있었다. 15 자리 이상의 숫자를 저장하고 수학을 수행하는 "쉬운"방법이 있습니까?

나는 유클리드 거리 enter image description here 난 그냥 더 정확하게해야하거나 그게 내가 아마 실 거예요 여기에 통과 제한 를 사용하여 거리를 계산하고, 나는 그런 비슷한 사진을 비교하지 못할 선생님에게 이야기해야합니까? gmplib.org

도이 사이트에이 라이브러리를 설치하는 방법을 가이드가있다 :

+0

제곱근을 취할 필요가 없습니다. 동일한 해답 대신 제곱 된 차이를 비교할 수 있기 때문입니다. 또한 여기에 15 자리 이상의 유효 숫자가 반드시 필요하지 않습니다. 두 장의 그림이이 정밀도와 동일한 경우 똑같이 가까운 것으로 취급하십시오. – TonyK

답변

2

은 아마 당신은 대수적 방법을 사용할 수 있습니다.

우리가 당신이 벡터 X 또는 B에 가까운 경우 calcuate하려고한다고 가정합시다. 나는거야 (D 2 (X, B)

된다 - 당신이 계산해야하는

D 2 (X, )의 표시이다 간결성 일부 통로)

하고 생략 매우 유사해야 값 사이의 차이를 포함

. 이러한 작은 값을 합산하면 집계 작업보다 정밀도가 높아집니다.

+0

나의 마지막 발언에 대한 메모 : 실제로 두 개의 동일한 크기의 숫자를 추가하고 (-> 정밀도 손실 없음), 아마도 훨씬 작은 하나의 값을 곱합니다 (IEEE 표현을 사용하는 기계의 정밀도 손실 없음). –

관련 문제