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


 
: Angle-Difference-stack ( b1 b2 - a +/-180)
\ Algorithm  with stack manipulation without branches ( s. Frotran Groovy)
     fswap f-                   \ Delta angle
     360e fswap fover fmod      \ mod 360
     fover 1.5e f* f+           \ +   540
     fover fmod                 \ mod 360
     fswap f2/  f-              \ -   180
;
: Angle-Difference-const  ( b1 b2 - a +/-180)
\ Algorithm  without  Branches ( s. Fotran Groovy)
     fswap f-
     360e  fmod
     540e  f+
     360e fmod
     180e  f-
;
 
\  Test Word  for  requested tests
: test-ad    ( b1 b2 -- )
   fover fover
   Angle-Difference-stack  f. 
   Angle-Difference-const  f. 
;
 