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


import math
import strutils
 
 
proc delta(b1, b2: float) : float =
  result = (b2 - b1) mod 360.0
 
  if result < -180.0:
    result += 360.0
  elif result >= 180.0:
    result -= 360.0
 
 
let testVectors : seq[tuple[b1, b2: float]] = @[
      (20.00,       45.00 ),
     (-45.00,       45.00 ),
     (-85.00,       90.00 ),
     (-95.00,       90.00 ),
     (-45.00,      125.00 ),
     (-45.00,      145.00 ),
     ( 29.48,      -88.64 ),
     (-78.33,     -159.04 ),
  (-70099.74,    29840.67 ),
 (-165313.67,    33693.99 ),
    (1174.84,  -154146.66 ),
   (60175.77,    42213.07 ) ]
 
for vector in testVectors:
  echo vector.b1.formatFloat(ffDecimal, 2).align(13) &
       vector.b2.formatFloat(ffDecimal, 2).align(13) &
       delta(vector.b1, vector.b2).formatFloat(ffDecimal, 2).align(13)
 