Кто быстрее считает – человек или компьютер? Вроде бы глупый вопрос, ведь компьютеры выполняют квадриллионы арифметических операций в секунду! А на самом деле – не глупый.
Ещё в далёком 1946 году в Японии состоялось весьма примечательное соревнование – между человеком, считающем на электронном калькуляторе и человеком, считающим на соробане, то есть японских счётах. Да-да, простых счётах из первого класса – с деревянной рамой и косточками, нанизанными на стальные прутики. Решались задачи на сложение, вычитание, умножение и деление. Человек победил со впечатляющим счётом 4:1.
С тех пор подобные состязания пытались повторять – но очень быстро «свернули» это занятие. А знаете, почему? Потому что опытный человек со счётами считал быстрее, чем человек с электронным калькулятором – несмотря на то, что калькуляторы (и компьютеры) становились всё быстрее, быстрее, быстрее...
Как такое можно объяснить? А на самом деле всё очень просто. Вот, скажем, пластиковая банковская карточка – ведь ей оплачивать быстрее, чем наличными деньгами? Конечно, да. А теперь скажите – а насколько быстрее мама стала ходить в магазин после того, как с наличных монет и купюр «пересела» на банковскую карточку? А почти ни насколько.
Потому что расчёт на кассе – это только часть общего затраченного времени. И товар надо найти, и набрать в тележку, и каждую единицу товара просканировать на кассе, а ещё надо дойти до магазина, потом вернуться домой из магазина – и везде банковская карточка никакой разницы не делает, ведь так?
Вот и с вычислениями на калькуляторе (и компьютере) происходит то же самое: да, компьютер считает (именно считает) очень быстро. Но сперва нужно все числа в компьютер «вбить» с помощью клавиатуры, не правда ли? А на это нужно время! Можете даже в шутку поспорить с другом или подругой, что можете считать быстрее калькулятора: задаёте пример
4 + 5 = ?
Сами вы практически мгновенно, «в уме», «на пальцах», сообразите, что ответ будет девять. А пока ваш товарищ нажмёт на калькуляторе кнопки «4», потом «+», потом «5», потом «равно»... Пройдет секунды две, а то и три-четрые. Вот вы и победили быстродействующий компьютер! Так что для честного счёта «скорость» надо всегда измерять «в целом», включая все сопутствующие действия. Современный суперкомпьютер может сложить за секунду миллиард миллиардов чисел – это так. Но вы сперва попробуйте ввести в компьютер «руками с клавиатуры» миллиард миллиардов чисел. Сколько это займёт у вас времени? То-то.
«Ну,» – скажете вы – «это простая арифметика, начальная школа... А вот если какая-нибудь высшая математика для старшеклассников или вообще для института, там такого быть не может!». Ошибаетесь, может. Скажем, увидев вот такой вот интеграл...
...опытный математик тут же, подумав буквально секунду, скажет «ответ равен двадцати восьми». И будет прав! А сколько бы времени у нас отняло решение такой задачи, если бы мы захотели решить её «на калькуляторе»? Снова – посчитает-то компьютер быстрее некуда (кто бы спорил), но ты сперва введи условие задачи, вбей нужные формулы... А человек (само собой, не всякий, подготовленный, но тем не менее) ни про какие формулы не думает – он просто «видит» прямоугольник размером 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, это очень даже существенная экономия. Такая вот «запись наоборот», когда знак операции – плюс, минус, умножить, разделить и так далее – пишется не между числами, а после них, оказалась очень выгодной и удобной. На основе такой бесскобочной системы даже был создан компьютерный язык программирования Форт, который благодаря компактности программ получил распространение в системах управления спутниками.
«Но ведь это смешно!» – скажете вы. «Вместо два умножить на два писать два два умножить?». Да, именно так. Вот такая вот «маленькая» деталька – а существенная прибавка в скорости вычислений и краткости программ. Ну а что смешно – да, смешно. Помните учителя Йоду из «Звёздных войн»? Как он забавно говорит? Так вот, математики на этот счёт шутят так:
Йоды учителя секрет знайте: математик он, бесскобочной обратной записью овладевший!
А программисты – так:
Магистра Йоды тайна раскрыта: на Форте программист он старый просто!
Читайте также:
Осталась ровно неделя на то, чтобы успеть оформить подписку на журнал "Лучик"! Познакомиться с журналом, полистать его можно здесь.