---------------------------------------------------------- lines 8-116 of file: include/cppad/core/near_equal_ext.hpp ---------------------------------------------------------- {xrst_begin near_equal_ext} Compare AD and Base Objects for Nearly Equal ############################################ Syntax ****** | *b* = ``NearEqual`` ( *x* , *y* , *r* , *a* ) Purpose ******* The routine :ref:`NearEqual-name` 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: | |tab| ``const`` *Type* & *x* | |tab| ``const AD`` < *Type* > & *x* | |tab| ``const AD< std::complex<`` *Type* > > & *x* y * The arguments *y* has one of the following possible prototypes: | |tab| ``const`` *Type* & *y* | |tab| ``const AD`` < *Type* > & *y* | |tab| ``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: .. math:: \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: .. math:: | 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 :ref:`NumericType-name` . The routine :ref:`CheckNumericType-name` will generate an error message if this is not the case. If *a* and *b* have type *Type* , the following operation must be defined .. list-table:: :widths: auto * - **Operation** - **Description** * - *a* <= *b* - less that or equal operator (returns a ``bool`` object) Operation Sequence ****************** The result of this operation is not an :ref:`glossary@AD of Base` object. Thus it will not be recorded as part of an AD of *Base* :ref:`operation sequence` . Example ******* {xrst_toc_hidden example/general/near_equal_ext.cpp } The file :ref:`near_equal_ext.cpp-name` contains an example and test of this extension of :ref:`NearEqual-name` . It return true if it succeeds and false otherwise. {xrst_end near_equal_ext}