12#ifndef ARCANE_UTILS_MATH_H
13#define ARCANE_UTILS_MATH_H
18#include "arcane/utils/Convert.h"
41ARCCORE_HOST_DEVICE
inline double
44#ifdef ARCANE_CHECK_MATH
45 if (v == 0.0 || v < 0.0)
54ARCCORE_HOST_DEVICE
inline long double
57#ifdef ARCANE_CHECK_MATH
58 if (v == 0.0 || v < 0.0)
70ARCCORE_HOST_DEVICE
inline double
73#ifdef ARCANE_CHECK_MATH
74 if (v == 0.0 || v < 0.0)
83ARCCORE_HOST_DEVICE
inline long double
86#ifdef ARCANE_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 ARCANE_CHECK_MATH
154ARCCORE_HOST_DEVICE
inline long double
157#ifdef ARCANE_CHECK_MATH
174ARCCORE_HOST_DEVICE
inline double
177#ifdef ARCANE_CHECK_MATH
179 if (x < 0.0 &&
::floor(y) != y)
182 return std::pow(x, y);
195ARCCORE_HOST_DEVICE
inline long double
196pow(
long double x,
long double y)
198#ifdef ARCANE_CHECK_MATH
200 if (x < 0.0 && ::floorl(y) != y)
203 return std::pow(x, y);
213ARCCORE_HOST_DEVICE
inline long double
214pow(
double x,
long double y)
216#ifdef ARCANE_CHECK_MATH
218 if (x < 0.0 && ::floorl(y) != y)
221 return std::pow(x, y);
231ARCCORE_HOST_DEVICE
inline long double
232pow(
long double x,
double y)
234#ifdef ARCANE_CHECK_MATH
236 if (x < 0.0 &&
::floor(y) != y)
239 return std::pow(x, y);
252template <
class T> ARCCORE_HOST_DEVICE
inline T
253min(
const T& a,
const T& b)
255 return ((a < b) ? a : b);
262ARCCORE_HOST_DEVICE
inline long double
263min(
long double a,
long double b)
265 return ((a < b) ? a : b);
272ARCCORE_HOST_DEVICE
inline long double
273min(
double a,
long double b)
275 return ((a < b) ? a : b);
282ARCCORE_HOST_DEVICE
inline long double
283min(
long double a,
double b)
285 return ((a < b) ? a : b);
292ARCCORE_HOST_DEVICE
inline double
295 return ((a < b) ? a : b);
302ARCCORE_HOST_DEVICE
inline float
305 return ((a < b) ? a : b);
312ARCCORE_HOST_DEVICE
inline int
315 return ((a < b) ? a : b);
328template <
class T> ARCCORE_HOST_DEVICE
inline T
329max(
const T& a,
const T& b)
331 return ((a < b) ? b : a);
338ARCCORE_HOST_DEVICE
inline long double
339max(
long double a,
long double b)
341 return ((a < b) ? b : a);
348ARCCORE_HOST_DEVICE
inline long double
349max(
double a,
long double b)
351 return ((a < b) ? b : a);
358ARCCORE_HOST_DEVICE
inline long double
359max(
long double a,
double b)
361 return ((a < b) ? b : a);
368ARCCORE_HOST_DEVICE
inline unsigned long
369max(
unsigned long a,
unsigned long b)
371 return ((a < b) ? b : a);
378ARCCORE_HOST_DEVICE
inline double
381 return ((a < b) ? b : a);
388ARCCORE_HOST_DEVICE
inline float
391 return ((a < b) ? b : a);
398ARCCORE_HOST_DEVICE
inline Int16
401 return ((a < b) ? b : a);
408ARCCORE_HOST_DEVICE
inline Int32
411 return ((a < b) ? b : a);
418ARCCORE_HOST_DEVICE
inline Int64
421 return ((a < b) ? b : a);
428ARCCORE_HOST_DEVICE
inline Int64
431 return ((a < b) ? b : a);
438ARCCORE_HOST_DEVICE
inline Int64
441 return ((a < b) ? b : a);
451ARCCORE_HOST_DEVICE
inline long double
461ARCCORE_HOST_DEVICE
inline double
471ARCCORE_HOST_DEVICE
inline float
481ARCCORE_HOST_DEVICE
inline short
484 return (a > 0) ? a : (short)(-a);
491ARCCORE_HOST_DEVICE
inline int
494 return (a > 0) ? a : (-a);
501ARCCORE_HOST_DEVICE
inline long
504 return (a > 0L) ? a : (-a);
511ARCCORE_HOST_DEVICE
inline long long
514 return (a > 0LL) ? a : (-a);
531extern ARCANE_UTILS_EXPORT
double
544extern ARCANE_UTILS_EXPORT
void
555#ifdef ARCANE_REAL_USE_APFLOAT
556#include "arcane/utils/MathApfloat.h"
Declarations of types used in Arcane.
Modifiable view of an array of type T.
__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.
__host__ __device__ double pow(double x, double y)
Power function.
__host__ __device__ double floor(double v)
Round v down to the immediately lower integer.
__host__ __device__ double sqrt(double v)
Square root of v.
__host__ __device__ double log(double v)
Natural logarithm of v.
__host__ __device__ double log10(double v)
Decimal logarithm of v.
double truncateDouble(double v, Integer nb_digit)
Truncates the precision of the real number v to nb_digit significant figures.
__host__ __device__ double exp(double v)
Exponential of v.
std::int64_t Int64
Signed integer type of 64 bits.
Int32 Integer
Type representing an integer.
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.