12#ifndef ARCCORE_BASE_MATHASE_H
13#define ARCCORE_BASE_MATHASE_H
21#if defined(ARCANE_CHECK_MATH) || defined(ARCCORE_CHECK_MATH)
22#define ARCCORE_DO_CHECK_MATH
41ARCCORE_HOST_DEVICE
inline double
44#ifdef ARCCORE_DO_CHECK_MATH
45 if (v == 0.0 || v < 0.0)
54ARCCORE_HOST_DEVICE
inline long double
57#ifdef ARCCORE_DO_CHECK_MATH
58 if (v == 0.0 || v < 0.0)
70ARCCORE_HOST_DEVICE
inline double
73#ifdef ARCCORE_DO_CHECK_MATH
74 if (v == 0.0 || v < 0.0)
83ARCCORE_HOST_DEVICE
inline long double
86#ifdef ARCCORE_DO_CHECK_MATH
87 if (v == 0.0 || v < 0.0)
99ARCCORE_HOST_DEVICE
inline double
102 return std::floor(v);
108ARCCORE_HOST_DEVICE
inline long double
111 return std::floor(v);
120ARCCORE_HOST_DEVICE
inline double
129ARCCORE_HOST_DEVICE
inline long double
141ARCCORE_HOST_DEVICE
inline double
144#ifdef ARCCORE_DO_CHECK_MATH
154ARCCORE_HOST_DEVICE
inline long double
157#ifdef ARCCORE_DO_CHECK_MATH
174ARCCORE_HOST_DEVICE
inline double
177#ifdef ARCCORE_DO_CHECK_MATH
179 if (x < 0.0 &&
::floor(y) != y)
182 return std::pow(x, y);
194ARCCORE_HOST_DEVICE
inline long double
195pow(
long double x,
long double y)
197#ifdef ARCCORE_DO_CHECK_MATH
199 if (x < 0.0 && ::floorl(y) != y)
202 return std::pow(x, y);
212ARCCORE_HOST_DEVICE
inline long double
213pow(
double x,
long double y)
215#ifdef ARCCORE_DO_CHECK_MATH
217 if (x < 0.0 && ::floorl(y) != y)
220 return std::pow(x, y);
230ARCCORE_HOST_DEVICE
inline long double
231pow(
long double x,
double y)
233#ifdef ARCCORE_DO_CHECK_MATH
235 if (x < 0.0 &&
::floor(y) != y)
238 return std::pow(x, y);
251template <
class T> ARCCORE_HOST_DEVICE
inline T
252min(
const T& a,
const T& b)
254 return ((a < b) ? a : b);
261ARCCORE_HOST_DEVICE
inline long double
262min(
long double a,
long double b)
264 return ((a < b) ? a : b);
271ARCCORE_HOST_DEVICE
inline long double
272min(
double a,
long double b)
274 return ((a < b) ? a : b);
281ARCCORE_HOST_DEVICE
inline long double
282min(
long double a,
double b)
284 return ((a < b) ? a : b);
291ARCCORE_HOST_DEVICE
inline double
294 return ((a < b) ? a : b);
301ARCCORE_HOST_DEVICE
inline float
304 return ((a < b) ? a : b);
311ARCCORE_HOST_DEVICE
inline int
314 return ((a < b) ? a : b);
327template <
class T> ARCCORE_HOST_DEVICE
inline T
328max(
const T& a,
const T& b)
330 return ((a < b) ? b : a);
337ARCCORE_HOST_DEVICE
inline long double
338max(
long double a,
long double b)
340 return ((a < b) ? b : a);
347ARCCORE_HOST_DEVICE
inline long double
348max(
double a,
long double b)
350 return ((a < b) ? b : a);
357ARCCORE_HOST_DEVICE
inline long double
358max(
long double a,
double b)
360 return ((a < b) ? b : a);
367ARCCORE_HOST_DEVICE
inline unsigned long
368max(
unsigned long a,
unsigned long b)
370 return ((a < b) ? b : a);
377ARCCORE_HOST_DEVICE
inline double
380 return ((a < b) ? b : a);
387ARCCORE_HOST_DEVICE
inline float
390 return ((a < b) ? b : a);
397ARCCORE_HOST_DEVICE
inline Int16
400 return ((a < b) ? b : a);
407ARCCORE_HOST_DEVICE
inline Int32
410 return ((a < b) ? b : a);
417ARCCORE_HOST_DEVICE
inline Int64
420 return ((a < b) ? b : a);
427ARCCORE_HOST_DEVICE
inline Int64
430 return ((a < b) ? b : a);
437ARCCORE_HOST_DEVICE
inline Int64
440 return ((a < b) ? b : a);
450ARCCORE_HOST_DEVICE
inline long double
460ARCCORE_HOST_DEVICE
inline double
470ARCCORE_HOST_DEVICE
inline float
480ARCCORE_HOST_DEVICE
inline short
483 return (a > 0) ? a : (short)(-a);
490ARCCORE_HOST_DEVICE
inline int
493 return (a > 0) ? a : (-a);
500ARCCORE_HOST_DEVICE
inline long
503 return (a > 0L) ? a : (-a);
510ARCCORE_HOST_DEVICE
inline long long
513 return (a > 0LL) ? a : (-a);
Definitions and globals of Arccore.
__host__ __device__ Real2 min(Real2 a, Real2 b)
Returns the minimum of two Real2.
T max(const T &a, const T &b, const T &c)
Returns the maximum of three elements.
Namespace for mathematical functions.
apfloat pow(apfloat x, apfloat y)
Power function.
apfloat exp(apfloat v)
Exponential of v.
apfloat floor(apfloat v)
Round v down to the immediately lower integer.
apfloat log(apfloat v)
Natural logarithm of v.
apfloat sqrt(apfloat v)
Square root of v.
std::int64_t Int64
Signed integer type of 64 bits.
std::int16_t Int16
Signed integer type of 16 bits.
__host__ __device__ void arcaneMathError(long double arg_value, const char *func_name)
Signals an invalid argument in a mathematical function.
std::int32_t Int32
Signed integer type of 32 bits.