; docformat = 'rst'

;+
; Determines whether two values are equal, or within a given tolerance.
;
; :Returns:
;    1 if the two values are within the tolerance, 0 if not; for array values
;    calculates the Euclidean distance between the two arrays or array and 
;    scalar
; 
; :Params:
;    a : in, required, type=numeric scalar/array
;       first value(s) to compare
;    b : in, required, type=numeric scalar/array
;       second value(s) to compare
;
; :Keywords:
;    tolerance : in, optional, type=numeric, default=machine precision
;       tolerance within which the two values are considered equal
;-
function mg_equal, a, b, tolerance=tolerance
  compile_opt strictarr
  
  double = size(a, /type) eq 5L || size(b, /type) eq 5L
  info = machar(double=double)
  
  _tolerance = n_elements(tolerance) eq 0L ? info.eps : tolerance
  
  diff = (abs(a - b)) ^ 2
  if (n_elements(diff) gt 0L) then diff = total(diff)
  diff = sqrt(diff)
  
  return, diff lt _tolerance
end