Поскольку все функции поиска корней принимают функцию-объект, их можно заставить работать (часто в гораздо меньшем количестве кода) с помощью лямбды C++11. Вот сокращенный код для корневой функции «игрушечного» куба:
template <class T>
T cbrt_2deriv_lambda(T x)
{
using namespace boost::math::tools;
int exponent;
frexp(x, &exponent);
T guess = ldexp(1., exponent / 3);
T min = ldexp(0.5, exponent / 3);
T max = ldexp(2., exponent / 3);
const int digits = std::numeric_limits<T>::digits;
int get_digits = static_cast<int>(digits * 0.4);
boost::uintmax_t maxit = 20;
T result = halley_iterate(
[x](const T& g){ return std::make_tuple(g * g * g - x, 3 * g * g, 6 * g); },
guess, min, max, get_digits, maxit);
return result;
}
Полный код этого примера находится по адресуroot_finding_example.cpp,