3 #include "clooptools.h" 9 using lti_real_t = __float128;
10 using lti_complex_t = __complex128;
11 inline auto lt_real(lti_complex_t
const &z) {
return crealq(z); }
12 inline auto lt_imag(lti_complex_t
const &z) {
return cimagq(z); }
13 inline auto lt_pow(lti_real_t
const &x,
int n) {
return powq(x, n); }
14 inline std::complex<lti_real_t> ensure_std_complex(lti_complex_t
const &z) {
15 return std::complex<lti_real_t>(lt_real(z), lt_imag(z));
18 using lti_real_t = double;
19 using lti_complex_t = std::complex<double>;
20 inline auto lt_real(lti_complex_t
const &z) {
return (z).real(); }
21 inline auto lt_imag(lti_complex_t
const &z) {
return (z).imag(); }
22 inline auto lt_pow(lti_real_t
const &x,
int n) {
return std::pow(x, n); }
23 inline std::complex<lti_real_t> ensure_std_complex(lti_complex_t
const &z) {
28 inline lti_real_t reg_int = 1e-8;
61 template<
class ValueType,
class LoopToolsFunc,
class ...Args>
63 ValueType
const &scale,
64 ValueType
const &preFactor,
71 const auto mu = getmudim();
73 const auto res = preFactor*func(
id, (args * scale) ..., eps);
78 inline lti_real_t abs_re(lti_complex_t
const &value) {
79 const lti_real_t re = lt_real(value);
80 return (re < 0) ? -re : re;
83 inline auto min_ct(lti_real_t
const &first) {
87 template<
class ...Args>
89 lti_real_t
const &first,
90 lti_real_t
const &second,
94 const auto recmin = min_ct(second, std::forward<Args>(args)...);
95 return (first < recmin) ? first : recmin;
98 template<
class ...Args>
99 auto abs_min_ct(Args &&...args)
101 return min_ct(abs_re(args)...);
104 template<
class ValueType,
class EpsType>
109 ValueType
const &m1_2,
110 ValueType
const &m2_2,
111 ValueType
const &m3_2,
115 const bool p1Zero = (p1_2 == 0.);
116 const bool p3Zero = (p3_2 == 0.);
117 if (p1Zero && p3Zero && p2_2 == 0.) {
121 else if (p1_2 == p2_2 && !p1Zero) {
122 p2_2 = (1 + eps) * p1_2;
123 if (abs_re(m1_2/p1_2) > 1e5 || abs_re(m2_2/p1_2) > 1e5 || abs_re(m3_2/p1_2) > 1e5)
126 else if (p1_2 == p3_2 && !p1Zero) {
127 p3_2 = (1 + eps) * p1_2;
128 if (abs_re(m1_2/p2_2) > 1e5 || abs_re(m2_2/p2_2) > 1e5 || abs_re(m3_2/p2_2) > 1e5)
131 else if (p3_2 == p2_2 && !p3Zero) {
132 p3_2 = (1 + eps) * p2_2;
133 if (abs_re(m1_2/p3_2) > 1e5 || abs_re(m2_2/p3_2) > 1e5 || abs_re(m3_2/p3_2) > 1e5)
138 inline lti_real_t scaleFactorA(
int id, lti_real_t
const &scale)
144 return 1/(scale * scale);
146 std::cerr <<
"Error: id " <<
id <<
" not recognized" 147 <<
" for integral A.\n ";
152 inline lti_real_t scaleFactorB(
int id, lti_real_t
const &scale)
165 inline lti_real_t scaleFactorC(
int id, lti_real_t
const &scale)
184 inline lti_real_t scaleFactorD(
int id, lti_real_t
const &scale)
186 if (
id == dd0000 || (
id >= dd00001 &&
id <= dd00003))
189 || (
id >= dd001 &&
id <= dd003)
190 || (
id >= dd0011 &&
id <= dd0033)
191 || (
id >= dd00111 &&
id <= dd00333))
196 inline lti_real_t scaleFactorE(
int id, lti_real_t
const &scale)
201 || (
id >= ee001 &&
id <= ee004)
202 || (
id >= ee0011 &&
id <= ee0044))
204 return scale*scale*scale;
Definition: looptools_interface.h:5