Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Drumpi on March 03, 2020, 03:35:58 PM

Title: MOD + ABS + Comparación = imposible
Post by: Drumpi on March 03, 2020, 03:35:58 PM
Buenas a todos:


Anoche estaba escribiendo código y me pasó una cosa muy curiosa. Tengo una línea de código similar a esta:
if (valorint1 % abs(valorint2) == 0)
Pues el compilador me lanzaba un error de que la operación sólo podía ejecutarse con números enteros. Vale, ABS devuelve un float, pero si quitaba el ABS y ponía (-valorint2) (porque sé que va a ser negativo, lo de ABS es por las formalidades), me sigue diciendo lo mismo.
Si guardo abs(valorint) en una variable temporal, sí funciona, pero la línea, tal cual, no.


Y he hecho comparaciones con valores abs anteriormente sin problemas, pero parece que con el módulo, la cosa no es tan sencilla :p


Ya de paso, ando un poco oxidado con BennuGD después de tanto C#, VB, XML... ¿Cómo era el casteo de variables? Para convertir un float en un int.
Title: Re:MOD + ABS + Comparación = imposible
Post by: panreyes on March 03, 2020, 04:37:59 PM
Prueba ésto:
if (valorint1 % ((int) abs(valorint2)) == 0)
Title: Re:MOD + ABS + Comparación = imposible
Post by: Yawin on April 10, 2020, 02:40:29 PM
El módulo devuelve el resto y buscas que sea cero. Eso significa que el dividendo tiene que ser múltiplo del divisor.Todo número múltiplo de un número también es múltiplo de su negativo. Por lo que no necesitas hacer el "abs".
O sea: 100%2 == 100%(-2)
Title: Re:MOD + ABS + Comparación = imposible
Post by: Drumpi on April 14, 2020, 11:31:57 PM
Puede que sí o puede que no. Creo recordar que si uno de los valores es negativo, tanto el cociente como el resto son negativos.
Sé que tuve muchos problemas con los valores positivos y negativos cuando trataba de hacer cíclico el scroll tileado, usando el mod para obtener valores dentro del rango del ancho/alto del mapa.

Lo malo es que no lo he corregido aun, y ya no sé dónde está esa línea ^^U
Title: Re:MOD + ABS + Comparación = imposible
Post by: Yawin on April 15, 2020, 09:30:03 PM
Te certifico que el módulo será siempre 0 en el caso que necesitas. Como digo, para que el resto sea cero, el dividendo tiene que ser múltiplo del divisor. Todos los múltiplos de un número lo son de su negativo (evidentemente, el resultado de la división cambiará de signo) y su módulo, por tanto, sigue siendo cero.
Y el cero es cero. No es ni positivo ni negativo.
Title: Re:MOD + ABS + Comparación = imposible
Post by: Drumpi on April 15, 2020, 11:48:21 PM
Ups, cierto ^^U
Llevaba un día de mucho programar y, claro, estaba pensando en todos los valores del resto, no estaba pensando que el valor que a mi me hacía falta es sólo el cero.
Bien visto, eso ahorra un cálculo a la operación, puede parecer poco, pero si la operación va donde sospecho, cualquier cálculo que se ahorre será bienvenido.