13#ifndef ROOT_MathHeaders_H
14#define ROOT_MathHeaders_H
24#if defined(ROOT_MATH_SYCL)
25template <
class Scalar>
28 return sycl::fmod(
x,
y);
31template <
class Scalar>
37template <
class Scalar>
43template <
class Scalar>
49template <
class Scalar>
55template <
class Scalar>
61template <
class Scalar>
67template <
class Scalar>
70 return sycl::atan2(
x,
y);
73template <
class Scalar>
79template <
class Scalar>
85template <
class Scalar>
88 return sycl::floor(
x);
91template <
class Scalar>
97template <
class Scalar>
103inline long double math_log(
long double x)
106 double castres = sycl::log(castx);
107 return (
long double)castres;
110template <
class Scalar>
116template <
class Scalar>
119 return sycl::fabs(
x);
122template <
class Scalar>
125 return sycl::pow(
x,
y);
180#elif defined(ROOT_MATH_CUDA)
181template <
class Scalar>
184 return std::fmod(
x,
y);
187template <
class Scalar>
193template <
class Scalar>
199template <
class Scalar>
205template <
class Scalar>
211template <
class Scalar>
217template <
class Scalar>
223template <
class Scalar>
226 return std::atan2(
x,
y);
229template <
class Scalar>
235template <
class Scalar>
241template <
class Scalar>
244 return std::floor(
x);
247template <
class Scalar>
253template <
class Scalar>
259template <
class Scalar>
265template <
class Scalar>
271template <
class Scalar>
274 return std::pow(
x,
y);
280 return static_cast<T>(22756.0);
283template <
typename Scalar>
292 Scalar z_scaled = z / rho;
293 if (
fabs(z_scaled) < big_z_scaled) {
294 return log(z_scaled +
sqrt(z_scaled * z_scaled + 1.0));
316template <
typename Scalar>
320 if (tanThetaOver2 == 0) {
322 }
else if (tanThetaOver2 > std::numeric_limits<Scalar>::max()) {
325 return -
log(tanThetaOver2);
331template <
class Scalar>
334 return std::fmod(
x,
y);
337template <
class Scalar>
343template <
class Scalar>
349template <
class Scalar>
355template <
class Scalar>
361template <
class Scalar>
367template <
class Scalar>
373template <
class Scalar>
376 return std::atan2(
x,
y);
379template <
class Scalar>
385template <
class Scalar>
391template <
class Scalar>
394 return std::floor(
x);
397template <
class Scalar>
403template <
class Scalar>
409template <
class Scalar>
415template <
class Scalar>
421template <
class Scalar>
424 return std::pow(
x,
y);
430 return static_cast<T
>(22756.0);
433template <
typename Scalar>
439 static const Scalar big_z_scaled = pow(std::numeric_limits<Scalar>::epsilon(),
static_cast<Scalar>(-.25));
441 Scalar z_scaled = z / rho;
442 if (fabs(z_scaled) < big_z_scaled) {
443 return log(z_scaled + sqrt(z_scaled * z_scaled + 1.0));
446 return z > 0 ? log(2.0 * z_scaled + 0.5 / z_scaled) : -log(-2.0 * z_scaled);
464template <
typename Scalar>
467 Scalar tanThetaOver2 = tan(theta / 2.);
468 if (tanThetaOver2 == 0) {
470 }
else if (tanThetaOver2 > std::numeric_limits<Scalar>::max()) {
473 return -log(tanThetaOver2);
RVec< PromoteType< T > > tan(const RVec< T > &v)
RVec< PromoteTypes< T0, T1 > > pow(const T0 &x, const RVec< T1 > &v)
RVec< PromoteType< T > > log(const RVec< T > &v)
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
VecExpr< UnaryOp< Fabs< T >, VecExpr< A, T, D >, T >, T, D > fabs(const VecExpr< A, T, D > &rhs)
Scalar Eta_FromRhoZ(Scalar rho, Scalar z)
Scalar math_log(Scalar x)
Scalar math_floor(Scalar x)
Scalar math_pow(Scalar x, Scalar y)
Scalar math_cos(Scalar x)
Rotation3D::Scalar Scalar
Scalar math_atan(Scalar x)
Scalar math_sqrt(Scalar x)
Scalar math_tan(Scalar x)
Scalar math_sinh(Scalar x)
Scalar math_asin(Scalar x)
Scalar math_acos(Scalar x)
Scalar math_exp(Scalar x)
Scalar Eta_FromTheta(Scalar theta, Scalar r)
Implementation of eta from -log(tan(theta/2)).
Scalar math_atan2(Scalar x, Scalar y)
Scalar math_fabs(Scalar x)
Scalar math_cosh(Scalar x)
Scalar math_fmod(Scalar x, Scalar y)
Scalar math_sin(Scalar x)