Java: ¿Cómo realizo una división de enteros que redondea hacia -Infinity en lugar de 0?
(Nota: no es lo mismo queesta otra pregunta ya que el OP nunca especificó explícitamente el redondeo hacia 0 o -Infinito)
JLS 15.17.2 Dice que la división entera se redondea hacia cero. Si lo quierofloor()
-como comportamiento para divisores positivos (no me importa el comportamiento para divisores negativos), ¿cuál es la forma más sencilla de lograr esto que es numéricamente correcta para todas las entradas?
<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>
(actualización: quiero tener una solución tanto paraint
ylong
aritmética.)