$\newcommand{\W}[1]{ \; #1 \; } \newcommand{\R}[1]{ {\rm #1} } \newcommand{\B}[1]{ {\bf #1} } \newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} } \newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} } \newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} } \newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }$
 # include <cppad/cppad.hpp> # include <complex> bool NearEqualExt(void) { bool ok = true; using CppAD::AD; using CppAD::NearEqual; // double double x = 1.00000; double y = 1.00001; double a = .00005; double r = .00005; double zero = 0.; // AD<double> AD<double> ax(x); AD<double> ay(y); ok &= NearEqual(ax, ay, zero, a); ok &= NearEqual(ax, y, r, zero); ok &= NearEqual(x, ay, r, a); // std::complex<double> AD<double> cx(x); AD<double> cy(y); // AD< std::complex<double> > AD<double> acx(x); AD<double> acy(y); ok &= NearEqual(acx, acy, zero, a); ok &= NearEqual(acx, cy, r, zero); ok &= NearEqual(acx, y, r, a); ok &= NearEqual( cx, acy, r, a); ok &= NearEqual( x, acy, r, a); return ok; }