Подтвердить что ты не робот

Являются ли целые числа фиксированной ширины распределенными по умножению?

Для трех n-разрядных целых чисел a, b и c (например, 32-разрядных) всегда ли верно, что a * (b + c) == (a * b) + (a * c), принимая во внимание переполнение целых чисел?

Я думаю, что это не зависит от языка, но если это не так, я специально интересуюсь ответом для Java.

4b9b3361

Ответ 2

Да, это всегда верно.

Это свойство, которое выполняется, потому что вы эффективно выполняете арифметику по модулю 2 ^ 32. Тот факт, что Java int подписаны, усложняет ситуацию (и означает, что вы не можете предположить, что вы выполняете эквивалент по модулю арифметики вообще), но не влияет на это конкретное свойство дистрибутива.

Мыслительный эксперимент должен рассмотреть возможность его реализации с использованием повторного добавления и рассмотреть, что происходит, когда он переполняется. Поскольку порядок выполнения дополнений не влияет на результат с помощью int (даже с переполнением), то также не делает умножения в виде повторных добавлений в другом порядке. И поскольку умножение int всегда эквивалентно повторному добавлению, результаты также должны быть одинаковыми для переупорядоченного умножения. Q.E.D.

Ответ 3

Распределительное свойство выполняется для по модулю арифметики; так как фиксированная длина бита с двумя целыми числами арифметики гомоморфная для модульной арифметики для той же (беззнаковой) битовой длины, свойство дистрибутива выполняется при использовании двух Арифметика дополнений.

Более подробное объяснение можно найти здесь.

Ответ 4

Да, он хранится на Java, в том числе в случае переполнения. (Некоторые другие языки не указывают поведение переполнения, и в этом случае никаких гарантий не делается.)

Ответ 5

Для 2-мерной математики в значении целого числа вопрос сводится к следующему:

is (a*(b+c))%(2**32) === (a*b+a*c)%(2**32)

поэтому для 2-значной целочисленной математики это всегда верно.

Для не-2-значного целочисленного математического выражения, я думаю, это зависит от того, как обрабатываются переполнения. Если он отражает модульную математику, тогда это правда.