Finding the angle between two bearings is often confusing.[1]



Task

Find the angle which is the result of the subtraction b2 - b1, where b1 and b2 are the bearings.


Input bearings are expressed in the range   -180   to   +180   degrees.

The  result  is also expressed in the range   -180   to   +180   degrees.



Compute the angle for the following pairs:

 20 degrees (b1) and 45 degrees (b2)
 -45 and 45
 -85 and 90
 -95 and 90
 -45 and 125
 -45 and 145
 29.4803 and -88.6381
 -78.3251 and -159.036


Optional extra
 
Allow the input bearings to be any (finite) value.



Test cases

 -70099.74233810938 and 29840.67437876723
 -165313.6666297357 and 33693.9894517456
 1174.8380510598456 and -154146.66490124757
 60175.77306795546 and 42213.07192354373


' version 28-01-2019
' compile with: fbc -s console
 
#Include "string.bi"
 
Function frmt(num As Double) As String
 
    Dim As String temp = Format(num, "#######.#############")
    Dim As Integer i = Len(temp) -1
 
    If temp[i] = Asc(".") Then temp[i] = 32
    If InStr(temp, ".") = 0 Then
        Return Right(Space(10) + temp, 9) + Space(13)
    End If
    temp = Space(10) + temp + Space(13)
    Return Mid(temp, InStr(temp, ".") -8, 22)
 
End Function
 
' ------=< MAIN >=------
 
Dim As Double b1, b2, bb1, bb2, diff
 
Print
Print "      b1                    b2                    difference"
Print " -----------------------------------------------------------"
 
Do
    Read b1, b2
    If b1 = 0 And b2 = 0 Then Exit Do
    diff = b2 - b1
    diff = diff - Int(diff / 360) * 360
    If diff > 180 Then diff -= 360
    Print frmt(b1); frmt(b2); frmt(diff)
Loop
 
Data   20,45,   -45,45,   -85,90
Data  -95,90,   -45,125,   -45,145
Data  29.4803,-88.6381,  -78.3251,-159.036
Data  -70099.74233810938,     29840.67437876723
Data -165313.6666297357,      33693.9894517456
Data    1174.8380510598456, -154146.66490124757
Data   60175.77306795546,     42213.07192354373
 
' empty keyboard buffer
While InKey <> "" : Wend
Print : Print "hit any key to end program"
Sleep
End