Para calcular (x*y)/z
con redondeo ascendente suponiendo x
, y
y z
positivo y suponiendo que (x*y)
no se desborda:
int resultado = (x * y-1) / z + 1;
Este método evita desbordamientos (distintos de los que ya pueden estar presentes en x*y
).
Si usa la alternativa r = (x*y+(z-1))/z;
luego agregar el (z-1)
puede causar un desbordamiento, mientras que la primera solución no lo hará.
- Cómo resolver 3 = 2 (sin (x) ^ 2) -sin (x)
- ¿Por qué no puedo tomar sen x en esta resolución de integración por el método de sustitución?
- ¿Qué es [math] \ int \ sqrt {\ ln (1 / x)} \, dx [/ math]?
- 3/4 de algo es igual a 18. ¿Cuál es el algo?
- ¿Cuál es el eje de simetría y el máximo / mínimo de la ecuación X ^ 2 -10x + 25 = 9?
Donde x*y
es negativo, o z
es negativo, entonces necesita ajustar de acuerdo con el comportamiento que desee. Lamentablemente, C y otros lenguajes difieren de la forma en que a los matemáticos les gustaría hacer esto.
Si el resultado se ajusta dentro de un int
, es posible que el valor intermedio x*y
se desborde. Esto se puede evitar de la siguiente manera:
int resultado = (x / z) * y + ((x% z) * y-1) / z + 1;
Nuevamente, modifique esto de acuerdo a sus necesidades si uno de x*y
o z
es negativo.