31 #if AC_DOUBLE_PRECISION != 1
32 #define exp(x) expf(x)
33 #define sin(x) sinf(x)
34 #define cos(x) cosf(x)
35 #define sqrt(x) sqrtf(x)
40 max(
const T& a,
const T& b)
47 min(
const T& a,
const T& b)
52 static inline const int3
53 max(
const int3& a,
const int3& b)
55 return (int3){
max(a.x, b.x),
max(a.y, b.y),
max(a.z, b.z)};
58 static inline const int3
59 min(
const int3& a,
const int3& b)
61 return (int3){
min(a.x, b.x),
min(a.y, b.y),
min(a.z, b.z)};
66 sum(
const T& a,
const T& b)
73 clamp(
const T& val,
const T&
min,
const T&
max)
75 return val < min ? min : val >
max ?
max : val;
85 is_power_of_two(
const unsigned val)
87 return val && !(val & (val - 1));
91 #define HOST_DEVICE_INLINE __host__ __device__ __forceinline__
93 #define HOST_DEVICE_INLINE inline
99 return (
AcReal3){a.x + b.x, a.y + b.y, a.z + b.z};
103 operator+(
const int3& a,
const int3& b)
105 return (int3){a.x + b.x, a.y + b.y, a.z + b.z};
110 return (int3){a.x * b.x, a.y * b.y, a.z * b.z};
124 return (
AcReal3){a.x - b.x, a.y - b.y, a.z - b.z};
128 operator-(
const int3& a,
const int3& b)
130 return (int3){a.x - b.x, a.y - b.y, a.z - b.z};
136 return (
AcReal3){-a.x, -a.y, -a.z};
149 return (
AcReal3){a * b.x, a * b.y, a * b.z};
154 return (
AcReal3){a * b.x, a * b.y, a * b.z};
160 return a.x * b.x + a.y * b.y + a.z * b.z;
174 c.x = a.y * b.z - a.z * b.y;
175 c.y = a.z * b.x - a.x * b.z;
176 c.z = a.x * b.y - a.y * b.x;
184 return !isnan(a) && !isinf(a);
190 return is_valid(a.x) && is_valid(a.y) && is_valid(a.z);