Java: Jak wykonać podział całkowity, który zaokrągla w kierunku -Infinity zamiast 0?

(Uwaga: nie to samo coto inne pytanie ponieważ OP nigdy nie określił wyraźnie zaokrąglenia w kierunku 0 lub -Infinity)

JLS 15.17.2 mówi, że podział liczb całkowitych zaokrągla się w kierunku zera. Jeśli chcęfloor()podobne zachowanie dla dzielników dodatnich (nie obchodzi mnie zachowanie dzielników ujemnych), jaki jest najprostszy sposób osiągnięcia tego, który jest poprawny numerycznie dla wszystkich wejść?

int ifloor(int n, int d)
{
    /* returns q such that n = d*q + r where 0 <= r < d
     * for all integer n, d where d > 0
     *
     * d = 0 should have the same behavior as `n/d`
     *
     * nice-to-have behaviors for d < 0:
     *   option (a). same as above: 
     *     returns q such that n = d*q + r where 0 <= r < -d
     *   option (b). rounds towards +infinity:
     *     returns q such that n = d*q + r where d < r <= 0
     */
}

long lfloor(long n, long d)
{
    /* same behavior as ifloor, except for long integers */
}

(aktualizacja: chcę mieć rozwiązanie dla obuint&nbsp;ilong&nbsp;arytmetyka.)