Почему я получаю неопределенный результат? - PullRequest
0 голосов
/ 19 октября 2019

У меня есть функция для вычисления расстояния по координатам

Private Function CalcularDistancia(ByVal X As Double, ByVal Y As Double, ByVal X2 As Double, ByVal Y2 As Double) As Double
    Dim pi As Double = 3.1415926535897931
    Dim X_1, X_2, Y_1, Y_2, DistanciaTotal As Double

    X_1 = ((90 - X) * pi) / 180
    X_2 = ((90 - X2) * pi) / 180
    Y_1 = (Y * pi) / 180
    Y_2 = (Y2 * pi) / 180

    DistanciaTotal = Acos(Cos(X_1) * Cos(X_2) + Sin(X_1) * Sin(X_2) * Cos(Y_1 - Y_2)) * 6371
    Return DistanciaTotal
End Function

Ошибка, кажется, возникает, когда обе координаты совпадают, но не всегда. Я не получаю никакой ошибки, но вместо этого -1. # IND (неопределенный NaN). Я не вижу деления на ноль или чего-то недопустимого в моей функции.

Как я могу отладить это?

Что означает -1. # IND (вывод двух потоков)

1 Ответ

1 голос
/ 19 октября 2019
Private Function CalcularDistancia(ByVal X As Double, ByVal Y As Double, ByVal X2 As Double, ByVal Y2 As Double) As Double
    Dim pi As Double = 3.1415926535897931
    Dim X_1, X_2, Y_1, Y_2, DistanciaTotal As Double

    X_1 = ((90 - X) * pi) / 180
    X_2 = ((90 - X2) * pi) / 180
    Y_1 = (Y * pi) / 180
    Y_2 = (Y2 * pi) / 180

    ' ArcCos(N) evaluation does a divide by Sqr(-N * N + 1) thus causing division by zero for some values, e.g. 1.
    Dim MyXY as Double, MyNN1 as Double
    MyXY = (Cos(X_1) * Cos(X_2) + Sin(X_1) * Sin(X_2) * Cos(Y_1 - Y_2))
    MyNN1 = -MyXY * MyXY + 1
    If (MyNN1 = 0) bail out

    DistanciaTotal = Acos(MyXY) * 6371

    Return DistanciaTotal
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...