Several variants of modulo operation.
bun add @fightingdreamer/math-modulo
import {flooredModulo} from '@fightingdreamer/math-modulo';
const result = flooredModulo(-1, 4)
const expect = 3
console.assert(result == expect)
const {flooredModulo} = require('@fightingdreamer/math-modulo');
const result = flooredModulo(-1, 4)
const expect = 3
assert(result == expect)
function truncatedModulo(value: number, divisor: number): number
Based on truncated division, result have the same sign as the value.
function euclideanModulo(value: number, divisor: number): number
Based on euclidean division, result is always non negative.
function flooredModulo(value: number, divisor: number): number
Based on floored division, result have the same sign as the divisor.
function roundedModulo(value: number, divisor: number): number
Based on rounded division, result have sign and falls between divisor/-2 and divisor/+2.
function ceiledModulo(value: number, divisor: number): number
Based on ceiled division, result have the opposite sign as the divisor.