Blender V4.3
math_base_safe_inline.c
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifndef __MATH_BASE_SAFE_INLINE_C__
6#define __MATH_BASE_SAFE_INLINE_C__
7
9#include "BLI_utildefines.h"
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15MINLINE float safe_divide(float a, float b)
16{
17 return (b != 0.0f) ? a / b : 0.0f;
18}
19
20MINLINE float safe_modf(float a, float b)
21{
22 return (b != 0.0f) ? fmodf(a, b) : 0.0f;
23}
24
25MINLINE float safe_floored_modf(float a, float b)
26{
27 return (b != 0.0f) ? a - floorf(a / b) * b : 0.0f;
28}
29
30MINLINE float safe_logf(float a, float base)
31{
32 if (UNLIKELY(a <= 0.0f || base <= 0.0f)) {
33 return 0.0f;
34 }
35 return safe_divide(logf(a), logf(base));
36}
37
38MINLINE float safe_sqrtf(float a)
39{
40 return sqrtf(max_ff(a, 0.0f));
41}
42
44{
45 return (a > 0.0f) ? 1.0f / sqrtf(a) : 0.0f;
46}
47
48MINLINE float safe_asinf(float a)
49{
50 CLAMP(a, -1.0f, 1.0f);
51 return asinf(a);
52}
53
54MINLINE float safe_acosf(float a)
55{
56 CLAMP(a, -1.0f, 1.0f);
57 return acosf(a);
58}
59
60MINLINE float safe_powf(float base, float exponent)
61{
62 if (UNLIKELY(base < 0.0f && exponent != (int)exponent)) {
63 return 0.0f;
64 }
65 return powf(base, exponent);
66}
67
68#ifdef __cplusplus
69}
70#endif
71
72#endif /* __MATH_BASE_SAFE_INLINE_C__ */
MINLINE float max_ff(float a, float b)
#define MINLINE
#define CLAMP(a, b, c)
#define UNLIKELY(x)
local_group_size(16, 16) .push_constant(Type b
#define logf(x)
#define powf(x, y)
#define asinf(x)
#define fmodf(x, y)
#define floorf(x)
#define acosf(x)
#define sqrtf(x)
MINLINE float safe_sqrtf(float a)
MINLINE float safe_logf(float a, float base)
MINLINE float safe_acosf(float a)
MINLINE float safe_modf(float a, float b)
MINLINE float safe_powf(float base, float exponent)
MINLINE float safe_divide(float a, float b)
MINLINE float safe_asinf(float a)
MINLINE float safe_floored_modf(float a, float b)
MINLINE float safe_inverse_sqrtf(float a)