아래에 언급 된 기술은 eps
및 fix
을 사용합니다. 이 경우에는 보다 덜 "못 생"합니다. 몇 가지 코드와 설명을 통해 단계별로 살펴 보겠습니다.
%%// Original indices
org_indices = [15 30 45 60]
%%// Scaled indices
scaled_indices = org_indices/3165
%%// Retrieved indices that are yet to be converted to exact integers
retrieved_indices = scaled_indices*3165
%%// Verify precision issue
check_ind1 = retrieved_indices(1) - 15
check_ind1
출력 1.7764e-15
하고 정확하게 0이된다.
공식 MATLAB 설명서에 따르면 -이라고 적혀 있습니다. d = eps (X)이면 d는 abs (X)와 같은 정밀도의 크기 부동 소수점 숫자까지의 양의 거리입니다 다음
따라서 X.됨에 거리/오프셋을 계산할 수 -
eps_val = eps(retrieved_indices)
eps_val
이 요소가있는 경우는 상기에 대응해야하는 내에 결정 창 벡터로서 간주 될 수있다 또한 거짓말하는 정수 그것 안에. 우리는 우리의 의사 결정이 윈도우의 최대 값을 사용할 수 있습니다, 우리를 위해 쉽게하려면 그것은 매우 안전, 우리는이 10 배 폭 증가시킬 수 있도록하고 현실을 부르 자하는 것은 max_window_width -
max_window_width = 10*max(eps_val)
이 아니다 반올림은 반올림과 마찬가지로 추측하기 때문에 반올림은 범위가 [-0.5 0.5]
이기 때문에 1
이라는 창 길이를 사용합니다. 반면이 창 길이는 7.1054e-14
입니다.
check_ind2 = retrieved_indices2 -
retrieved_indices2 = fix(retrieved_indices + max_window_width)
하나 정확성 값을 다시 확인할 수 -
마지막으로,이 최대 폭을 첨가하고 fix
사용 소수 부분을 절단함으로써 본래의 인덱스를 다시 얻을 수있다 (1) - 15 개
check_ind2
출력 0
01,230,936,864,475,.
정수 값을 그대로 사용하십시오. 모든 프로그래밍 언어의 모든 부동 소수점 숫자는이 문제가 있습니다 (10 진수 시스템에서 정확하게 1/3을 표현할 수없는 것과 비슷합니다) –
인덱스 인 경우 '3165'로 나누면 첫 번째 자리에서 '추한'것입니다 . – Divakar
이것은 또 다른 옵션이지만 너무 간단하지는 않습니다. 이는 원본 이미지에서 이미 완료된 많은 작물 및 작업 이후에 발생하기 때문입니다. – Adiel