2010-04-14 26 views
7

tiene la siguiente propiedad aritmética de números enteros?propiedades de división de enteros

(m/n)/l == m/(n*l) 

Al principio pensé que sabía responder (no se sostiene), pero ahora no estoy seguro. ¿Se cumple para todos los números o solo para ciertas condiciones, es decir, n > l?

la pregunta se refiere a la aritmética de la computadora, a saber q = n/m, q*m != n, ignorando el desbordamiento.

+0

Le gustan los bordes casos como desbordamientos? ¿O arquitecturas/idiomas extraños como aquellos donde 'n/m' se redondea hacia abajo en lugar de hacia cero? –

Respuesta

12
Case1 assume m = kn+b (b<n), 
left = (m/n)/l = ((kn+b)/n)/l = (k+b/n)/l = k/l (b/n=0, because b<n) 
right = (kn+b)/(n*l) = k/l + b/(n*l) = k/l (b/(n*l)=0, because b<n) 
=> left = right 

Case2 assume m = kn, 
left = (m/n)/l = (kn/n)/l = k/l 
right = kn/(n*l) = k/l 
=> left = right 

So, (m/n)/l == m/(n*l) 
+0

No es verdadero si n * l desborda el límite del tipo entero. – mtrw

+1

@mtrw para ser justos, sin mencionar – Anycorn

+0

@ziang, @aaa - He votado negativamente sobre este hecho de que el desbordamiento era una parte importante de la pregunta. Ahora mi downvote es demasiado viejo para deshacer. Lo siento ziang. – mtrw

5

¿Estás hablando de números enteros matemáticos? ¿O enteros de ancho fijo dentro de un lenguaje de programación?

Las dos ecuaciones son idénticas a los enteros matemáticos, pero las dos funciones tienen comportamientos de desbordamiento diferentes si está utilizando enteros de ancho fijo.

Por ejemplo, los números enteros supongamos que son de 32 bits

(1310720000/65536)/65537 = 20000/65537 = 0 

Sin embargo, 65536 * 65537 se desbordará un entero de 32 bits, y será equivalente a 65.536, por lo

1310720000/(65536*65537) = 1310720000/65536 = 20000 
+0

+1 por golpearme. ¡Y si pudiera, otro +1 por ser aparentemente el único respondedor que captura la palabra entero! – mtrw

Cuestiones relacionadas