summaryrefslogtreecommitdiff
path: root/src/code/fmodf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/code/fmodf.c')
-rw-r--r--src/code/fmodf.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/code/fmodf.c b/src/code/fmodf.c
index 6cc69dd87..e1e386223 100644
--- a/src/code/fmodf.c
+++ b/src/code/fmodf.c
@@ -1,12 +1,27 @@
#include "global.h"
+/**
+ * Computes one `x` modulo `y` for floats.
+ *
+ * Acts like the standard C fmodf except does not handle Infinity. See https://en.cppreference.com/w/c/numeric/math/fmod
+ * for the details. It summarizes this function as follows:
+ * "The floating-point remainder of the division operation x/y calculated by this function is exactly the value x - n*y,
+ * where n is x/y with its fractional part truncated.
+ *
+ * The returned value has the same sign as x and is less or equal to y in magnitude."
+ *
+ * @param x dividend
+ * @param y modulus
+ *
+ * @return f32 0.0f if y is 0.0f, or x modulo y otherwise
+ */
f32 fmodf(f32 x, f32 y) {
- s32 quot;
+ s32 n;
if (y == 0.0f) {
return 0.0f;
}
- quot = x / y;
+ n = x / y;
- return x - (quot * y);
+ return x - (n * y);
}