( note: не то же самое, что этот другой вопрос, поскольку OP никогда явно не указывал округление в сторону 0 или -Infinity)
JLS 15.17.2 говорит, что целочисленное деление округляется к нулю. Если я хочу floor()
-подобное поведение для положительных делителей (меня не волнует поведение для отрицательных делителей), что простейший способ достичь этого, который является численным правилом для всех входов?
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 */
}
(обновление: я хочу иметь решение как для int
, так и long
арифметики.)