Compare AD and Base Objects for Nearly Equal

Syntax
b = NearEqual(x, y, r, a)

Purpose
The routine NearEqual determines if two objects of the same type are nearly. This routine is extended to the case where one object can have type Type while the other can have type AD<Type> or AD< std::complex<Type> > .

x
The arguments x has one of the following possible prototypes:       const Type                     &x      const AD<Type>                 &x      const AD< std::complex<Type> > &x 
y
The arguments y has one of the following possible prototypes:       const Type                     &y      const AD<Type>                 &y      const AD< std::complex<Type> > &x 
r
The relative error criteria r has prototype       const Type &r  It must be greater than or equal to zero. The relative error condition is defined as: $$\frac{ | x - y | } { |x| + |y| } \leq r$$

a
The absolute error criteria a has prototype       const Type &a  It must be greater than or equal to zero. The absolute error condition is defined as: $$| x - y | \leq a$$

b
The return value b has prototype       bool b  If either x or y is infinite or not a number, the return value is false. Otherwise, if either the relative or absolute error condition (defined above) is satisfied, the return value is true. Otherwise, the return value is false.

Type
The type Type must be a NumericType . The routine CheckNumericType will generate an error message if this is not the case. If a and b have type Type , the following operation must be defined
 Operation Description a <= b less that or equal operator (returns a bool object)

Operation Sequence
The result of this operation is not an AD of Base object. Thus it will not be recorded as part of an AD of Base operation sequence .

Example
The file near_equal_ext.cpp contains an example and test of this extension of NearEqual . It return true if it succeeds and false otherwise.