\(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\R}[1]{ {\rm #1} }\)
a_double_binary_xam.cpp#
View page sourceC++: a_double Binary Operators With AD Result: Example and Test#
# include <cstdio>
# include <cppad/py/cppad_py.hpp>
bool a_double_binary_xam(void) {
using cppad_py::a_double;
bool ok = true;
a_double a2 = 2.0;
a_double a3(3.0);
// -----------------------------------------------------------------------
// a_double op a_double
a_double a5 = a2 + a3;
a_double a6 = a2 * a3;
a_double a1_minus = a2 - a3;
a_double a23 = a2 / a3;
//
ok = ok && a5 == 5.0;
ok = ok && a6 == 6.0;
ok = ok && a1_minus == -1.0;
ok = ok && a23.near_equal( a_double(2.0 / 3.0 ) );
// -----------------------------------------------------------------------
// a_double op double
a5 = a2 + 3.0;
a6 = a2 * 3.0;
a1_minus = a2 - 3.0;
a23 = a2 / 3.0;
//
ok = ok && a5 == 5.0;
ok = ok && a6 == 6.0;
ok = ok && a1_minus == -1.0;
ok = ok && a23.near_equal( a_double(2.0 / 3.0 ) );
// -----------------------------------------------------------------------
// double op a_double
a5 = cppad_py::radd(3.0, a2);
a6 = cppad_py::rmul(3.0, a2);
a_double a1 = cppad_py::rsub(3.0, a2);
a_double a32 = cppad_py::rdiv(3.0, a2);
//
ok = ok && a5 == 5.0;
ok = ok && a6 == 6.0;
ok = ok && a1 == 1.0;
ok = ok && a32.near_equal( a_double(3.0 / 2.0 ) );
// -----------------------------------------------------------------------
// pow
a_double a8 = cppad_py::pow(a2, a3);
a_double a9 = cppad_py::pow(a3, 2.0);
a_double a4 = cppad_py::pow(2.0, a2);
ok = ok && a8.near_equal( a_double(8.0) );
ok = ok && a9.near_equal( a_double(9.0) );
ok = ok && a4.near_equal( a_double(4.0) );
//
return( ok );
}