| 399 | #pragma pop_macro("round") |
| 400 | |
| 401 | float fmod_impl_float(float x, float y) { |
| 402 | #if FL_MATH_USE_LIBM |
| 403 | return ::fmodf(x, y); |
| 404 | #else |
| 405 | if (y == 0.0f) return 0.0f; |
| 406 | const float q = x / y; |
| 407 | // Truncate toward zero (libm fmod convention). |
| 408 | const float t = q >= 0.0f ? floor_impl_float(q) : ceil_impl_float(q); |
| 409 | return x - t * y; |
| 410 | #endif |
| 411 | } |
| 412 | |
| 413 | double fmod_impl_double(double x, double y) { |
| 414 | #if FL_MATH_USE_LIBM |
no test coverage detected