2010-04-14 6 views
7

est la propriété arithmétique entière suivante? Au début, je pensais que je savais réponse (ne tient pas), mais maintenant je ne suis pas sûr. Conserve-t-il tous les numéros ou uniquement certaines conditions, par exemple n > l?propriétés de division entière

la question se rapporte à l'arithmétique de l'ordinateur, à savoir q = n/m, q*m != n, en ignorant le débordement.

+0

Vous souciez-vous bord des cas comme des débordements? Ou wierd architectures/langages comme ceux où 'n/m' arrondit au lieu de vers zéro? –

Répondre

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

Non vrai si n * l dépasse la limite du type entier. – mtrw

+1

@mtrw pour être juste, cela va sans dire – Anycorn

+0

@ziang, @aaa - J'ai downvoted cette pensée que le débordement était une partie importante de la question. Maintenant, mon downvote est trop vieux pour défaire. Désolé ziang. – mtrw

5

Parlez-vous d'entiers mathématiques? Ou des entiers à largeur fixe dans un langage de programmation?

Les deux équations sont identiques aux entiers mathématiques, mais les deux fonctions ont des comportements de débordement différents si vous utilisez des entiers à largeur fixe.

Par exemple, entiers supposons sont 32 bits

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

Cependant, 65536 * 65537 débordera un entier de 32 bits, et sera égal à 65536, alors

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

+1 pour m'avoir battu. Et si je le pouvais, un autre +1 pour apparemment être le seul répondant à attraper le mot entier! – mtrw