diff options
author | Aaron Franke <arnfranke@yahoo.com> | 2018-06-10 15:06:44 -0500 |
---|---|---|
committer | Aaron Franke <arnfranke@yahoo.com> | 2018-06-10 15:06:44 -0500 |
commit | eebe41b1b0cbe10989ab2f7451ac5699c13c16a2 (patch) | |
tree | 728e109a025b99096cdfe134f95f48dbe63f9c85 | |
parent | acd9646ede45f8c34f423e392e60bf128c953bd1 (diff) |
[Core] [Math] Fix fposmod() function
ffff
meth
-rw-r--r-- | core/math/math_funcs.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 20001bb9a6..f0c0268f31 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -182,8 +182,22 @@ public: static _ALWAYS_INLINE_ float abs(float g) { return absf(g); } static _ALWAYS_INLINE_ int abs(int g) { return g > 0 ? g : -g; } - static _ALWAYS_INLINE_ double fposmod(double p_x, double p_y) { return (p_x >= 0) ? Math::fmod(p_x, p_y) : p_y - Math::fmod(-p_x, p_y); } - static _ALWAYS_INLINE_ float fposmod(float p_x, float p_y) { return (p_x >= 0) ? Math::fmod(p_x, p_y) : p_y - Math::fmod(-p_x, p_y); } + static _ALWAYS_INLINE_ double fposmod(double p_x, double p_y) { + double value = Math::fmod(p_x, p_y); + if ((value < 0 && p_y > 0) || (value > 0 && p_y < 0)) { + value += p_y; + } + value += 0.0; + return value; + } + static _ALWAYS_INLINE_ float fposmod(float p_x, float p_y) { + float value = Math::fmod(p_x, p_y); + if ((value < 0 && p_y > 0) || (value > 0 && p_y < 0)) { + value += p_y; + } + value += 0.0; + return value; + } static _ALWAYS_INLINE_ double deg2rad(double p_y) { return p_y * Math_PI / 180.0; } static _ALWAYS_INLINE_ float deg2rad(float p_y) { return p_y * Math_PI / 180.0; } |