Найти тему
Журнал "Лучик"

Как хорошо уметь считать!

Кто быстрее считает – человек или компьютер? Вроде бы глупый вопрос, ведь компьютеры выполняют квадриллионы арифметических операций в секунду! А на самом деле – не глупый.

Ещё в далёком 1946 году в Японии состоялось весьма примечательное соревнование – между человеком, считающем на электронном калькуляторе и человеком, считающим на соробане, то есть японских счётах. Да-да, простых счётах из первого класса – с деревянной рамой и косточками, нанизанными на стальные прутики. Решались задачи на сложение, вычитание, умножение и деление. Человек победил со впечатляющим счётом 4:1.

С тех пор подобные состязания пытались повторять – но очень быстро «свернули» это занятие. А знаете, почему? Потому что опытный человек со счётами считал быстрее, чем человек с электронным калькулятором – несмотря на то, что калькуляторы (и компьютеры) становились всё быстрее, быстрее, быстрее...

Счёты сверху, они победили!
Счёты сверху, они победили!

Как такое можно объяснить? А на самом деле всё очень просто. Вот, скажем, пластиковая банковская карточка – ведь ей оплачивать быстрее, чем наличными деньгами? Конечно, да. А теперь скажите – а насколько быстрее мама стала ходить в магазин после того, как с наличных монет и купюр «пересела» на банковскую карточку? А почти ни насколько.

Потому что расчёт на кассе – это только часть общего затраченного времени. И товар надо найти, и набрать в тележку, и каждую единицу товара просканировать на кассе, а ещё надо дойти до магазина, потом вернуться домой из магазина – и везде банковская карточка никакой разницы не делает, ведь так?

Вот и с вычислениями на калькуляторе (и компьютере) происходит то же самое: да, компьютер считает (именно считает) очень быстро. Но сперва нужно все числа в компьютер «вбить» с помощью клавиатуры, не правда ли? А на это нужно время! Можете даже в шутку поспорить с другом или подругой, что можете считать быстрее калькулятора: задаёте пример

4 + 5 = ?

Сами вы практически мгновенно, «в уме», «на пальцах», сообразите, что ответ будет девять. А пока ваш товарищ нажмёт на калькуляторе кнопки «4», потом «+», потом «5», потом «равно»... Пройдет секунды две, а то и три-четрые. Вот вы и победили быстродействующий компьютер! Так что для честного счёта «скорость» надо всегда измерять «в целом», включая все сопутствующие действия. Современный суперкомпьютер может сложить за секунду миллиард миллиардов чисел – это так. Но вы сперва попробуйте ввести в компьютер «руками с клавиатуры» миллиард миллиардов чисел. Сколько это займёт у вас времени? То-то.

«Ну,» – скажете вы – «это простая арифметика, начальная школа... А вот если какая-нибудь высшая математика для старшеклассников или вообще для института, там такого быть не может!». Ошибаетесь, может. Скажем, увидев вот такой вот интеграл...

-2

...опытный математик тут же, подумав буквально секунду, скажет «ответ равен двадцати восьми». И будет прав! А сколько бы времени у нас отняло решение такой задачи, если бы мы захотели решить её «на калькуляторе»? Снова – посчитает-то компьютер быстрее некуда (кто бы спорил), но ты сперва введи условие задачи, вбей нужные формулы... А человек (само собой, не всякий, подготовленный, но тем не менее) ни про какие формулы не думает – он просто «видит» прямоугольник размером 4 х 5 клеточек (потому что 9 минус 5 равно 4), то есть 20 клеток, и половинку квадратика размером 4 х 4 клеточки, то есть 8 клеток. Итого – 28.

Решение интеграла в уме
Решение интеграла в уме

Видите? Когда мы сравниваем «скорость счёта» у человека и компьютера, то должны понимать, что человек и компьютер на самом деле воспринимают данные (цифры) и думают очень и очень по-разному.

Вот другой пример. Точнее, два примера:

8 + 9 = ?

8 х 9 = ?

«Раз плюнуть!» – скажете вы. «В первом примере ответ 17, во втором – 72!». Верно. А теперь скажите пожалуйста – а какой из примеров вы решили быстрее? Первый или второй? И во сколько раз? Или всё-таки одинаково? Если у вас всё в порядке с арифметикой и вы доучились хотя бы до 3 класса школы, то наверняка и первый и второй примеры вы решите за секунду каждый.

А вот у компьютеров – не так! Потому что компьютер задачи на умножение – чисто по техническим причинам – сводит к повторному сложению. И задачку «восемью девять?» он будет решать не «по таблице», а складывая между собой последовательно девять восьмёрок:

8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 = 72

Таким образом, наш пример на умножение компьютер будет решать в 8 раз дольше, чем пример на сложение!

«Да какая разница, в восемь или даже в восемьдесят восемь,» – скажете вы возмущённо – «если компьютер всё равно считает быстрее человека в триллионы раз!».

А вот вы будете смеяться, но профессиональные специалисты по вычислительной математике и численным методам (это как раз специфические науки о том, «как решать сложные задачи на компьютерах») иногда сидят и въедливо подсчитывают каждую микросекунду машинного времени, буквально каждый «шаг» процессора компьютера! Например, сложение 8 и 9 занимает 1 шаг процессора. А умножение 8 и 9 занимает 8 шагов процессора... Можно ли выполнить эту операцию быстрее? С точки зрения человека – вопрос бессмысленный. С точки зрения компьютера – ещё какой осмысленный!

Потому что в системе команд любого цифрового процессора есть команда с замудрёным названием «побитный логический сдвиг влево». Она умножает число на 2 – и при этом требует только 1 шаг работы компьютера. Тогда если мы «развернём» умножение вот так:

8 х 9 = 8 х 8 + 8 = 8 х 2 х 2 х 2 + 8

...то сможем умножить 8 на 9 всего лишь за 4 шага процессора компьютера, а не за 8! Три логических сдвига и одно сложение – всего 4 шага, а не 8 сложений – всего 8 шагов! В два раза быстрее! Смотрите как странно – человеку такое «разложение» совсем не в тему, оно только усложняет расчёты. А вот компьютеру – наоборот, упрощает и ускоряет!

Это мы привели только один пример, очень-очень простой. А на самом деле такая вот «числовая оптимизация», внимательное использование всех возможностей процессора, тщательный «учёт» скорости всех операций позволяют ой как здорово экономить время – и человеческое, и машинное! – и решать задачи намного быстрее.

А вот другой пример. Решим на микрокалькуляторе несложный пример из «Арифметики» для 4 класса:

(14 + 16) : (3 + 2) = ?

Ответ, само собой, равен шести. Но это – не то, что нас интересует. Нас интересует – а можно ли этот пример решить на калькуляторе (и компьютере) быстрее? Вспоминаем: дело не только в том, сколько времени уйдёт у самого прибора на вычисления – дело в том, сколько мы будем вводить данные! Нам придётся сделать четырнадцать нажатий на кнопки. Можете подсчитать сами: «(», «1», «4», «+», «1», «6», «)», «:», «(», «3», «+», «2», «)» и «=». Если нажимать на 1 кнопку за 1 секунду, то решение примера займёт 14 секунд. Можно ли ускорить? Можно, конечно, попробовать очень-очень быстро нажимать на кнопки, чтобы по 3-4 кнопки за секунду успевать нажимать. Но при этом резко возрастает возможность ошибиться, не правда ли? Тупо попасть не по той кнопке на клавиатуре?

А вот английский специалист по компьютерам Чарльз Хэмблин еще в 50-х годах прошлого века придумал – как можно ускорить такие вот вычисления, причём весьма существенно! Для этого нужно – только не смейтесь! – делать всё наоборот. То есть вместо

2 + 3 писать 2 3 +

«Это что ещё за такое?» – спросите вы. «Это чушь какая-то!». А вот и не чушь. Такая система записи («нотация») при вычислениях называется «обратной бесскобочной», и она в плане скорости работы и экономии памяти очень даже выгодна! Её название подчёркивает главную особенность – скобки в такой системе не нужны вообще. Тот же самый пример из учебника в этой системе будет записываться и набираться на клавиатуре вот как:

14 [Enter] 16 + 3 [Enter] 2 + :

«1», «4», «Enter», «1», «6», «+», «3», «Enter», «2», «+», «:»

Всего 11 нажатий на кнопки – вместо 14! Если по 1 нажатию в секунду – то 11 секунд вместо 14, это очень даже существенная экономия. Такая вот «запись наоборот», когда знак операции – плюс, минус, умножить, разделить и так далее – пишется не между числами, а после них, оказалась очень выгодной и удобной. На основе такой бесскобочной системы даже был создан компьютерный язык программирования Форт, который благодаря компактности программ получил распространение в системах управления спутниками.

«Но ведь это смешно!» – скажете вы. «Вместо два умножить на два писать два два умножить?». Да, именно так. Вот такая вот «маленькая» деталька – а существенная прибавка в скорости вычислений и краткости программ. Ну а что смешно – да, смешно. Помните учителя Йоду из «Звёздных войн»? Как он забавно говорит? Так вот, математики на этот счёт шутят так:

Йоды учителя секрет знайте: математик он, бесскобочной обратной записью овладевший!

-4

А программисты – так:

Магистра Йоды тайна раскрыта: на Форте программист он старый просто!

Читайте также:

Почему корень – квадратный?

-5

Осталась ровно неделя на то, чтобы успеть оформить подписку на журнал "Лучик"! Познакомиться с журналом, полистать его можно здесь.

-6
-7