#include <iostream>
#include <kv/defint-singular.hpp>

typedef kv::interval<double> itv;

struct Sinc {
	template <class T> T operator()(const T& x) {
		return sin(x) / x;
	}
};

struct Sinc_s {
	template <class T> T operator()(const T& x) {
		return div_tn(sin(x), 1);
		// return div_reduce(sin(x), x, 1);
	}
};

int main() {
	std::cout.precision(17);
	itv r1, r2;

	r1 = kv::defint_singular(Sinc_s(), (itv)0., (itv)0.125, 12);
	r2 = kv::defint_autostep(Sinc(), (itv)0.125, (itv)1., 12);

	std::cout << r1 << "\n";
	std::cout << r2 << "\n";
	std::cout << r1 + r2 << "\n";
}
