examples - ¿Cuál es la diferencia entre "mod" y "remainder"?
operator c++ (4)
Mi amigo dijo que hay diferencias entre "mod" y "remainder".
Si es así, ¿cuáles son esas diferencias en C y C ++? ¿''%'' Significa "mod" o "rem" en C?
¿''%'' Significa "mod" o "rem" en C?
En C, %
es el resto.
..., el resultado del operador
/
es el cociente algebraico con cualquier parte fraccional descartada ... (Esto a menudo se denomina "truncamiento hacia cero"). C11dr §6.5.5 6Los operandos del operador
%
tendrán un tipo de entero. C11dr §6.5.5 2El resultado del operador
/
es el cociente de la división del primer operando por el segundo; el resultado del operador%
es el resto ... C11dr §6.5.5 5
¿Cuál es la diferencia entre "mod" y "remainder"?
C no define "mod", como la función de módulo entero utilizada en la división euclidiana u otro módulo . La "mod euclidiana" difiere de la operación de C en a%b
cuando a
es negativa.
// a % b
7 % 3 --> 1
7 % -3 --> 1
-7 % 3 --> -1
-7 % -3 --> -1
Módulo como división euclidiana
7 modulo 3 --> 1
7 modulo -3 --> 1
-7 modulo 3 --> 2
-7 modulo -3 --> 2
Código del módulo candidato:
int modulo_Euclidian(int a, int b) {
int m = a % b;
if (m < 0) {
// m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN
m = (b < 0) ? m - b : m + b;
}
return m;
}
Nota sobre el punto flotante: double fmod(double x, double y)
, aunque se llame "fmod", no es lo mismo que "división" de la división euclidiana, pero es similar al resto entero en C:
Las funciones
fmod
calculan el resto en coma flotante dex/y
. C11dr §7.12.10.1 2
fmod( 7, 3) --> 1.0
fmod( 7, -3) --> 1.0
fmod(-7, 3) --> -1.0
fmod(-7, -3) --> -1.0
Nota: C también tiene una función con nombre similar double modf(double value, double *iptr)
que divide el valor del argumento en partes integrales y fraccionarias, cada una de las cuales tiene el mismo tipo y signo que el argumento.
En matemáticas, el resultado de la operación módulo es el resto de la división euclidiana. Sin embargo, otras convenciones son posibles. Las computadoras y las calculadoras tienen varias formas de almacenar y representar números; por lo tanto, su definición del funcionamiento del módulo depende del lenguaje de programación y / o del hardware subyacente.
7 modulo 3 --> 1
7 modulo -3 --> -2
-7 modulo 3 --> 2
-7 modulo -3 --> -1
Hay una diferencia entre el módulo y el resto. Por ejemplo:
-21
mod 4
es 3
porque -21 + 4 x 6
es 3
.
Pero -21
dividido por 4
da -5
con un resto de -1
.
Para valores positivos, no hay diferencia.
Módulo, en aritmética modular como se refiere, es el valor que queda o el valor restante después de la división aritmética. Esto se conoce comúnmente como resto. % es formalmente el operador restante en C / C ++. Ejemplo:
7 % 3 = 1 // dividend % divisor = remainder
Lo que queda por discutir es cómo tratar las entradas negativas a esta operación%. Los modernos C y C ++ producen un valor de resto firmado para esta operación en el que el signo del resultado siempre coincide con la entrada del dividendo sin tener en cuenta el signo de la entrada del divisor.