Java: Как выполнить целочисленное деление, которое округляет к -Infinity, а не к 0?

(note: не такой какэтот другой вопрос поскольку OP никогда не указывал явно округление до 0 или -Infinity)

JLS 15.17.2 говорит, что целочисленное деление округляет до нуля. Если я хочуfloor()Как поведение для положительных делителей (меня не волнует поведение отрицательных делителей), какой самый простой способ достичь этого, который численно корректен для всех входных данных?

<code>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 */
}
</code>

(обновление: я хочу иметь решение как дляint а такжеlong арифметика.)

Ответы на вопрос(4)

Ваш ответ на вопрос