생성된 수식이 Excel의 UDF와 동일한 수식과 다른 결과를 제공하는 이유는 무엇입니까?

생성된 수식이 Excel의 UDF와 동일한 수식과 다른 결과를 제공하는 이유는 무엇입니까?

지구상의 두 좌표점 사이의 거리를 계산하는 긴 공식은 다음과 같습니다.

=ACOS(COS(RADIANS(90-LAT1)) *COS(RADIANS(90-LAT2)) +SIN(RADIANS(90-LAT1)) *SIN(RADIANS(90-LAT2)) *COS(RADIANS(Long1-LAT2) ))) *6371

다른 수식 안에 사용하는 것은 약간 번거롭기 때문에 이를 위해 사용자 정의 함수를 작성했습니다.

기능 DistXY(Lat1을 단일로, Lng1을 단일로, Lat2를 단일로, Lng2를 단일로) 단일로

DistXY = WorksheetFunction.Acos(Cos(WorksheetFunction.Radians(90 - Lat1)) * Cos(WorksheetFunction.Radians(90 - Lat2)) + Sin(WorksheetFunction.Radians(90 - Lat1)) * Sin(WorksheetFunction.Radians(90 - Lat2)) * Cos(WorksheetFunction.Radians(Lng1 - Lng2))) * 6371

기능 종료

보시다시피, 그들은 완전히 동일합니다. VBA에는 Acos 또는 Radians 함수가 없으므로 "worksheetFunction" 메서드도 사용합니다.

동일한 XY 좌표 쌍에 이 공식을 적용하면 왜 다른 결과가 나오나요?

예를 들어:

ABC 45.4960674,-73.514446에서 XYZ 43.5369,-71.8592로

거리XY()결과: 254.313156128

긴 수식 방법: 254.313268914

@raystafarian의 의견에 따라 모든 유형을 두 배로 변경하면 정밀도가 향상되었습니다. 하지만 여전히 차이가 있습니다.

기능 DistXY(Lat1 As double, Lng1 As double, Lat2 As double, Lng2 As double) As double ...

새로운 결과:

거리XY(): 254.3132689135060킬로미터

긴 수식 방법: 254.3132689135250킬로미터

답변1

다음과 같은 데이터 유형을 사용하고 반환하고 있습니다.하나의. 이로 인해 함수가 다른 데이터 유형의 기본값을 사용하는 경우 함수가 다르게 평가됩니다.

답변2

기반레이스타파리안의답변:

Public Function DistXY(Lat1 As Double, Lng1 As Double, Lat2 As Double, Lng2 As Double) As Double
   Dim i As Double, f As Double
   Dim wf As WorksheetFunction
   Set wf = Application.WorksheetFunction

   i = 90
   f = 6371

   DistXY = wf.Acos(Cos(wf.Radians(i - Lat1)) * Cos(wf.Radians(i - Lat2)) + Sin(wf.Radians(i - Lat1)) * Sin(wf.Radians(i - Lat2)) * Cos(wf.Radians(Lng1 - Lng2))) * f
End Function

여기에 이미지 설명을 입력하세요

관련 정보