Spencer, hay una forma sencilla de pensar mods (la forma en que se define en las matemáticas, no se programa). En realidad es bastante sencillo:
Toma a todos los números enteros:
...- 9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ...
Ahora pensemos en los múltiplos de 3 (si está considerando mod 3). Comencemos con 0 y los múltiplos positivos de 3:
...- 9, -8, -7, -6, -5, -4, -3, -2, -1, , 1 , 2, 3 , 4, 5, 6 , 7, 8, 9 ...
estos son todos los números que tienen un resto de cero cuando se divide por 3, es decir, estos son todos los unos que mod a cero.
Ahora cambiemos todo este grupo por uno.
...- 9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1 , 2, 3, 4 , 5, 6, 7 , 8, 9 ...
estos son todos los números que tienen un resto de 1 cuando se divide por 3, es decir, estos son todos los que mOD a 1.
Ahora vamos turno todo este grupo nuevamente por uno.
...- 9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2 , 3, 4, 5 , 6, 7, 8 , 9 ...
estos son todos los números que tienen un resto de 2 cuando se divide por 3, es decir, estos son todos los que mOD a 2.
podrás observe que en cada uno de estos casos, los números seleccionados están espaciados por 3. Siempre tomamos cada tercer número porque estamos considerando el módulo 3. (Si estuviéramos haciendo mod 5, tomaríamos cada quinto número).
Por lo tanto, puede llevar este patrón hacia atrás en los números negativos. Solo mantén el espacio de 3.Usted obtendrá estas tres clases de congruencia (un tipo especial de clases de equivalencia , como se les llama en matemáticas):
... -9, -8, -7, -6 , -5, -4, -3 , -2, -1, 0 , 1, 2, 3 , 4, 5, 6 , 7, 8, 9 ...
...- 9, -8, -7, -6, -5 , -4, -3, -2 , -1, 0, 1 , 2, 3, 4 , 5, 6, 7 , 8, 9 ...
...- 9, -8, -7 , -6, -5, -4 , -3, -2, -1 , 0, 1, , 3, 4, , 6, 7, , 9 ...
La representación matemática estándar de todos estos números equivalentes es utilizar el residuo de la clase, que solo significa tomar el número no negativo más pequeño.
Así que por lo general, cuando estoy pensando en mods y yo estoy tratando con un número negativo, sólo pienso de añadir sucesivamente el número de módulo y otra vez hasta que llegue el primer 0 o un número positivo:
Si estamos haciendo mod 3, entonces con -1, solo agregue 3 una vez: -1 + 3 = 2. Con -4, agregue 3 dos veces porque una vez no es suficiente. Si agregamos +3 una vez, obtenemos -4 + 3 = -1, que sigue siendo negativo. Así que agregaremos +3 nuevamente: -1 + 3 = 2.
Probemos un número negativo mayor, como -23. Si continúa agregando +3, obtendrá:
-23, -20, -17, -14, -11, -8, -5, -2, 1. Tenemos un número positivo, por lo que detener. El residuo es 1, y esta es la forma que los matemáticos suelen usar.
curioso si alguna de estas respuestas es módulo era lo que estaba buscando – kris
Utilice frem (a, b) - el módulo que está esperando (que es el tipo utilizado en matemáticas estándar) se llama "resto" en la codificación . C tiene fmod() y frem(), estás usando mod (también conocido como "%"), necesitas usar rem. Módulo en Matemáticas === Resto (rem) en el código. Tonto, lo sé. –
Se me ha informado que frem (a, b) estaba en GNU C solamente y no incluido en Obj-C. El equivalente sería este: 'a-b * floor ((float) a/(float) b)' –