2012-01-16 4 views
0

8 바이트 값에서 위도와 경도를 계산하는 알고리즘을 찾을 수 있습니까?위도/경도 계산

8 바이트 값 - A027AFDF5D984840과의 경도 49.1903648
8 바이트 값입니다 - 3AC7253383DD4B40과의 위도는 또한 가능하면 55.7305664

그럼 어떻게 계산 방법을 가르쳐주십시오입니다 부동 소수점 값 0000000000805A40

답변

0

위도 및 경도 계산과 관련이 없습니다. 예제에서 8 바이트를 사용한다고 가정하면 바이트 배열을 배정도 부동 소수점 값으로 변환해야합니다. 이 과정은 세 가지 예 모두에서 동일합니다.

부동 소수점 값을 찾으려면 비트 수준에서 바이트 배열을 처리해야합니다. 프로세스에 대한 설명은 here입니다. 또는 Wikipedia을 확인하십시오.

첫 번째 예에서는 40, 48, 98, 5D 순으로 바이트를 처리합니다. 첫 번째 두 바이트, 40 및 48 (0100 0000 0100 1000)을 분해하면 부호 비트 (0)와 지수 비트 범위 (100 0000 0100 -> 1028)를 얻을 수있는 충분한 정보가 있습니다. 여기에서 남은 52 비트를 계속 나열하여 숫자의 분수 부분을 결정하십시오. 위의 링크에서 계산을 수행하면 예제에서 기대하는 부동 소수점 값을 볼 수 있습니다.

참고로 일부 프로그래밍 언어는이 변환을 수행하는 방법을 제공합니다. 사용하는 언어에 따라 휠을 재발견 할 필요가 없습니다.

편집 : 예

, 우리는 바이트 배열의 세 가지 정보가 필요합니다 배정 밀도 부동 소수점 값으로 바이트 배열로 변환하려면 다음 부호 비트 (S)지수를 (E)분획 (F). 가장 먼저 할 일은 8 바이트 배열의 64 비트 표현을 만드는 것입니다. 위에서 언급했듯이 "역방향"순서로 바이트를 사용합니다 (항목을 읽으려면 리틀 엔디안). 프로세스를 설명하기에 충분하므로 처음 4 바이트 만 사용합니다.

40 48 98 5D ==> 01,000,000 01,001,000 10,011,000 01,011,101

I가 0 인 최 좌측의 순서로 상기 비트를 참조한다.

부호 비트 : 위의 배열에서 0 번째 비트입니다. 이 경우 S은 0입니다. 부호 비트는 정확히 생각할 수있는 것으로 부동 소수점 결과가 음수인지 양수인지를 결정합니다.

지수 : 비트 1-11은 지수를 결정합니다. 예에서, 지수 E은 100 0000 0100 ==> 1028입니다.

분수 : 나머지 비트 12-63은 분수를 결정합니다. 나는 그 과정이 어떻게 작동 하는지를 보여주기 위해 12-31 비트만을 설명했다 : 1000 10011000 01011101 ....

소수 비트는 십진수 값으로 변환되지 않는다. 대신, 설정 한 비트 (0이 아닌 1)에주의를 기울여 반복 할 필요가 있습니다. 비트의 색인은 여기에서 중요한 것입니다. 다시, 전체 예 (비트 12-63)에서,이 인덱싱은 1 내지 52가 될 것이다.

분수는 각각의 i ' 이 비트는 다음 식을 사용하여 설정됩니다. 2^-i. 이 예에서는 인덱스 1,5,8,9,14,16,17,18,20를 처리한다는 의미입니다.

처음 네 인덱스 예시의 목적을 위해 우리가 충분한 정밀도를 제공한다 :

F = (2^-1) + (2^-5) + (2^-2) + (2^-13) = 0.5 + ... + 0.03125 + + 0.00390625 0.001953125 0.537109375 =

V 수식함으로써 발견되는 최종 값 :

V = -1^* S의 2^(E-1023) * (1 + F) = -1^0 + 2^(1028-1023) * 1.537109375 = 49.1875

목표 값 49.1903648의 근사치입니다. 앞에서 설명한 방식으로 전체 분수 비트 범위를 계속 사용하려면 최종 값이 일치해야합니다.

마지막으로 Java를 사용한다고 언급 했으므로 ByteBuffer 클래스와 getDouble 함수 here을 사용 했습니까?

+0

도움을 주신 Adam에게 감사드립니다. 나는 자바에서 이것을 시도하고있다. 귀하의 제안에 따라이 변환을 수행하는 방법을 찾으려고 노력했지만 도움이되는 것은 없습니다. 또한 저수준 비트 조작을 처음 접했을 때 위의 링크에서 제공된 변환 방법을 얻지 못하고 있습니다. 가치 중 하나에 대해 전환을 설명해 주시겠습니까? 감사합니다,
Sachin Deshmukh – user1151896

+0

아담 너무 많이 일했습니다 ....... 좋은 포럼 – user1151896

+0

좋습니다. 향후 게시물에서 질문에 더 많은 태그를 지정하여 사용자가주의를 끌 수 있도록 할 수 있습니다. –