Метод сетки (также известный как метод ящика ) умножения является вводным подходом к вычислениям многозначного умножения, которые включают числа больше десяти. Поскольку его часто преподают в математическом образовании на уровне начальной школы или элементарной школы , этот алгоритм иногда называют методом грамматической школы. [1]
По сравнению с традиционным умножением в столбик метод сетки отличается тем, что четко разделяет умножение и сложение на два этапа и в меньшей степени зависит от разряда числа.
Хотя метод умножения сетки менее эффективен, чем традиционный метод, он считается более надежным , поскольку дети реже совершают ошибки. Большинство учеников продолжат изучать традиционный метод, как только освоятся с методом сетки; но знание метода сетки остается полезным «запасным вариантом» в случае путаницы. Также утверждается, что поскольку любой, кто много умножает, в настоящее время использует карманный калькулятор, эффективность сама по себе менее важна; в равной степени, поскольку это означает, что большинство детей будут реже использовать алгоритм умножения, им полезно ознакомиться с более явным (и, следовательно, более запоминающимся) методом.
Использование метода сетки стало стандартом в преподавании математики в начальных школах Англии и Уэльса с момента введения Национальной стратегии по математике с ее "часом по математике" в 1990-х годах. Его также можно найти в различных учебных программах в других местах. По сути, тот же подход к вычислениям, но без явного расположения сетки, также известен как алгоритм частичных произведений или метод частичных произведений .
Метод сетки можно представить, размышляя о том, как сложить количество точек в регулярном массиве, например, количество квадратиков шоколада в плитке шоколада. По мере того, как размер вычисления становится больше, становится проще начать считать десятками; и представлять вычисление в виде коробки, которую можно разделить, а не рисовать множество точек. [2] [3]
На самом простом уровне ученикам может быть предложено применить этот метод к вычислению, например, 3 × 17. Разбивая («разделяя») 17 на (10 + 7), это незнакомое умножение можно представить в виде суммы двух простых умножений:
поэтому 3 × 17 = 30 + 21 = 51.
Это структура «сетки» или «ящиков», которая и дала название методу умножения.
Столкнувшись с немного большим умножением, например, 34 × 13, ученики могут изначально поощряться также разбивать это на десятки. Так, разложив 34 как 10 + 10 + 10 + 4 и 13 как 10 + 3, произведение 34 × 13 может быть представлено:
Суммируя содержимое каждой строки, очевидно, что конечный результат расчета составляет (100 + 100 + 100 + 40) + (30 + 30 + 30 + 12) = 340 + 102 = 442.
Как только ученики привыкнут к идее разделения всего произведения на части из отдельных коробок, естественным шагом станет группировка десятков вместе, так что вычисление 34 × 13 станет
давая дополнение
поэтому 34 × 13 = 442.
Это наиболее распространенная форма для расчета сетки. В таких странах, как Великобритания, где преподавание метода сетки является обычным, ученики могут тратить значительное время на регулярное выполнение расчетов, подобных приведенным выше, пока метод не станет для них полностью удобным и знакомым.
Метод сетки напрямую распространяется на вычисления, включающие большие числа.
Например, чтобы вычислить 345 × 28, ученик может построить сетку с шестью простыми умножениями.
чтобы найти ответ 6900 + 2760 = 9660.
Однако на этом этапе (по крайней мере, в стандартной современной практике преподавания в Великобритании) учеников, возможно, начнут поощрять производить такие вычисления, используя традиционную форму умножения в столбик, без необходимости составлять сетку.
Традиционное умножение в столбик можно связать с умножением по сетке, в которой только одно из чисел разбивается на десятки и единицы, которые умножаются по отдельности:
Традиционный метод в конечном итоге быстрее и гораздо компактнее; но он требует двух значительно более сложных умножений, с которыми ученики могут поначалу бороться [ нужна ссылка ] . По сравнению с методом сетки традиционное длинное умножение может быть также более абстрактным [ нужна ссылка ] и менее очевидным [ нужна ссылка ] , поэтому некоторым ученикам сложнее запомнить, что должно быть сделано на каждом этапе и почему [ нужна ссылка ] . Поэтому учеников можно поощрять в течение довольно длительного периода использовать более простой метод сетки наряду с более эффективным традиционным методом длинного умножения в качестве проверки и запасного варианта.
Хотя метод сетки обычно не преподается как стандартный метод умножения дробей , его можно легко применять в простых случаях, когда легче найти произведение, разбив его на части.
Например, расчет 2 1/2 × 1 1/2 можно установить с помощью метода сетки
чтобы найти, что полученный продукт равен 2 + 1/2 + 1 + 1/4 = 3 3/4
Метод сетки также можно использовать для иллюстрации умножения произведения двучленов , например, ( a + 3)( b + 2), стандартной темы в элементарной алгебре (хотя обычно она не встречается до средней школы ):
Таким образом, ( а + 3)( b + 2) = ab + 3 b + 2 a + 6.
32-битные процессоры обычно не имеют инструкции для умножения двух 64-битных целых чисел. Однако большинство процессоров поддерживают инструкцию «умножение с переполнением», которая берет два 32-битных операнда, умножает их и помещает 32-битный результат в один регистр, а переполненный — в другой, что приводит к переносу. Например, к ним относятся инструкция, umull
добавленная в набор инструкций ARMv4t , или pmuludq
инструкция, добавленная в SSE2 , которая работает с нижними 32 битами регистра SIMD , содержащего две 64-битные полосы.
На платформах, которые поддерживают эти инструкции, используется слегка измененная версия метода сетки. Различия следующие:
0x100000000
. Обычно это делается либо сдвигом влево на 32, либо помещением значения в специальный регистр, который представляет старшие 32 бита.Это будет выглядеть следующим образом на языке C:
#include <stdint.h> uint64_t умножить ( uint64_t ab , uint64_t cd ) { /* Эти сдвиги и маски обычно неявны, так как 64-битные целые числа * часто передаются как 2 32-битных регистра. */ uint32_t b = ab >> 32 , a = ab & 0xFFFFFFFF ; uint32_t d = cd >> 32 , c = cd & 0xFFFFFFFF ; /* умножение с переполнением */ uint64_t ac = ( uint64_t ) a * ( uint64_t ) c ; uint32_t high = ac >> 32 ; /* переполнение */ uint32_t low = ac & 0xFFFFFFFF ; /* 32-битное умножение и добавление к старшим битам */ high += ( a * d ); /* добавление ad */ high += ( b * c ); /* добавление bc */ /* умножение на 0x100000000 (через сдвиг влево) и добавление к младшим битам с помощью двоичного ИЛИ. */ return (( uint64_t ) high << 32 ) | low ; }
Это будет выглядеть как процедура сборки ARM:
умножить : @ a = r0 @ b = r1 @ c = r2 @ d = r3 push { r4 , lr } @ сохранить r4 и lr в стеке umull r12 , lr , r2 , r0 @ умножить r2 и r0 , сохранить результат в r12 и переполнение в lr mla r4 , r2 , r1 , lr @ умножить r2 и r1 , сложить lr и сохранить в r4 mla r1 , r3 , r0 , r4 @ умножить r3 и r0 , сложить r4 и сохранить в r1 @ Значение неявно сдвигается влево , поскольку @ старшие биты 64 - битного целого числа возвращаются в r1 .mov r0 , r12 @ Установить младшие биты возвращаемого значения в r12 ( ac ) pop { r4 , lr } @ восстановить r4 и lr из стека bx lr @ вернуть младшие и старшие биты в r0 и r1 соответственно
Математически возможность разбить умножение таким образом известна как распределительный закон , который можно выразить в алгебре как свойство, что a ( b + c ) = ab + ac . Метод сетки использует распределительное свойство дважды для расширения произведения, один раз для горизонтального множителя и один раз для вертикального множителя.
Исторически сеточный расчет (слегка измененный) был основой метода, называемого решетчатым умножением , который был стандартным методом многозначного умножения, разработанным в средневековой арабской и индуистской математике. Решеточное умножение было введено в Европу Фибоначчи в начале тринадцатого века вместе с самими арабскими цифрами; хотя, как и цифры, предложенные им способы вычислений с их помощью изначально медленно приживались. Кости Непера были вычислительным вспомогательным средством, введенным шотландцем Джоном Непером в 1617 году для помощи в вычислениях по решетчатому методу.