свойства целочисленного деления

следующее целочисленное арифметическое свойство содержат?

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

Сначала я думал, что знал, ответ (не содержит), но теперь не уверено. Это содержит для всех чисел или только для определенных условий, т.е. n > l?

вопрос принадлежит компьютерной арифметике, а именно, q = n/m, q*m != n, игнорирование переполнения.

7
задан Anycorn 14 April 2010 в 03:03
поделиться

2 ответа

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)
12
ответ дан 6 December 2019 в 11:47
поделиться

Вы говорите о математических целых числах? Или целые числа фиксированной ширины в языке программирования?

Эти два уравнения идентичны математическим целым числам, но две функции имеют разное поведение при переполнении, если вы используете целые числа фиксированной ширины.

Например, предположим, что целые числа 32-битные

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

Однако 65536 * 65537 приведет к переполнению 32-битного целого числа и будет равно 65536, поэтому

1310720000/(65536*65537) = 1310720000/65536 = 20000
5
ответ дан 6 December 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: