// Copyright Matthew Pulver 2018 - 2019. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // https://www.boost.org/LICENSE_1_0.txt) #include #include template T fourth_power(T const& x) { T x4 = x * x; // retval in operator*() uses x4's memory via NRVO. x4 *= x4; // No copies of x4 are made within operator*=() even when squaring. return x4; // x4 uses y's memory in main() via NRVO. } int main() { using namespace boost::math::differentiation; constexpr unsigned Order = 5; // Highest order derivative to be calculated. auto const x = make_fvar(2.0); // Find derivatives at x=2. auto const y = fourth_power(x); for (unsigned i = 0; i <= Order; ++i) std::cout << "y.derivative(" << i << ") = " << y.derivative(i) << std::endl; return 0; } /* Output: y.derivative(0) = 16 y.derivative(1) = 32 y.derivative(2) = 48 y.derivative(3) = 48 y.derivative(4) = 24 y.derivative(5) = 0 **/