diff options
Diffstat (limited to 'src/scale.c')
-rw-r--r-- | src/scale.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/scale.c b/src/scale.c new file mode 100644 index 0000000..b2b6fad --- /dev/null +++ b/src/scale.c @@ -0,0 +1,17 @@ +#include <math.h> +#include <stdint.h> + +/* + * In order to correctly scale by fractions of 120 (used by + * wp_fractional_scale_v1), we need to bias the result before rounding. + */ + +uint32_t scale_apply(uint32_t base, uint32_t scale) +{ + return round(base * (scale / 120.) + 1e-6); +} + +uint32_t scale_apply_inverse(uint32_t base, uint32_t scale) +{ + return round(base * (120. / scale) + 1e-6); +} |