Калькуляторы с обратной польской нотацией
Средний 12 мин Блог компании Timeweb Cloud Ненормальное программирование *История IT Старое железо Обзор
На хабре уже многократно проскакивали статьи и переводы о калькуляторах с обратной польской нотацией. Раньше я не придавал им большого значения, пока на глаза не попался перевод статьи «Мягкое знакомство с дополнительным кодом», где фигурировал программистский калькулятор HP-16C. Что сподвигло меня разобраться, что за зверь такой «обратная польская нотация» или reverse Polish notation (далее по тексту RPN).
Искра, буря, безумие… Спешно поставив эмулятор HP-16C на телефон, я полез искать калькуляторы с поддержкой RPN, попутно скупая найденные экземпляры. В этой статье хочу поведать о четырёх редких! экземплярах, которые мне удалось найти на отечественных досках объявлений, и дать некоторые рекомендации тем, кто решит прикоснуться к удивительному миру программируемых калькуляторов.
Содержание статьи:
❯ Что такое обратная польская запись?
Краткий исторический очерк, что такое обратная польская нотация В 1920-х годах Ян Лукасевич разработал формальную логическую систему, которая позволяла задавать математические выражения без круглых скобок, помещая операторы перед (префиксная запись) или после (постфиксная запись) операндов. Например, выражение (инфиксное обозначение)
(4 + 5) × 6
может быть выражено в префиксной записи как
× 6 + 4 5 или × + 4 5 6
и может быть выражено в постфиксной записи как
4 5 + 6 × или 6 4 5 + ×
Префиксная нотация также стала известна как польская нотация в честь Лукасевича. Компания HP скорректировала постфиксную запись для использования с помощью клавиатуры калькулятора, добавила стек для хранения операндов и функции для изменения порядка записей в стеке. Полученную систему, компания HP назвала обратной польской нотацией (RPN) также в честь Лукасевича.
Более подробнее в музее калькуляторов HP.
Для нас это означает то, что для того чтобы сложить два числа, на обычном калькуляторе мы пишем:
2 + 5 =
и получаем результат. А в RPN-калькуляторе надо внести первое число в регистр Y, второе число в регистр X (они продвигаются по регистровому стеку), и потом выбрать действие:
5 [ВП] 2 +
Где [ВП] это кнопка «заталкивания» числа в стек (на калькуляторах HP — это Enter). И после этих манипуляций мы получим результат.
Таким образом, компания HP является законодателем моды и стандартом в области калькуляторостроения.
❯ С чего всё началось
Давно слышал о калькуляторах с обратной польской нотацией, но раньше как-то не придавал им значения и не пытался разобраться, что же это такое. И тут увидев в очередном переводе от Bright_Translate ( «Мягкое знакомство с дополнительным кодом» ) калькулятор HP-16C, и по-настоящему загорелся им. Я даже начал изучать его документацию и поставил себе эмулятор (для установки, возможно, потребуется VPN). Те, кому лень морочиться эмуляторами, могут попробовать его онлайн.
В России калькулятор HP-16C купить практически нереально, полагаю что даже у коллекционеров несколько штук на всю страну. Сам калькулятор не производится уже 35 лет, но при этом является легендой. Посмотрев цены на иностранных аукционах на эти модели, даже без учёта проблем с доставкой, был, мягко скажем, в лёгком недоумении. Есть даже энтузиасты, которые делают реплики этой серии калькуляторов и когда-то я делал совместный перевод статьи про такую копию.
Но эмулятор, хоть и очень круто — это совсем не то же самое, что использовать реальный калькулятор. Некоторое время назад, компания SwissMicros выпустила точную реплику HP-16C (и всех калькуляторов этой серии). Она, хоть и была на другом процессоре, но работала на той же прошивке (удивительно, как они согласовали лицензионные дрязги). Эта модель как раз и фигурирует в статье «Мягкое знакомство с дополнительным кодом».
К сожалению, у нас невозможно достать даже этот калькулятор, хотя мне очень хотелось попробовать и увидеть устройство живьём. В качестве альтернативы я читал документацию, игрался с эмулятором, но всё было не то. Хотелось нажимать настоящие физические клавиши, ощущать всю мощь у себя в ладони.
Одержимый идеей этого калькулятора, я поведал товарищу о своих терзаниях, а он, внезапно, мне говорит: а у меня есть такой калькулятор, купил в лучшие годы в Англии за 350 фунтов (точную цифру не помню, но порядок такой). Говорю, принеси в мастерскую, как будешь. И вот, товарищ из соседней мануфактуры даёт возможность прикоснуться к легенде.
Прикосновение к живой легенде (сверху эмулятор)
Даже передать не могу эмоции, которые я испытал. Можно видеть, что калькулятор позволяет из коробки работать с HEX, bin, oct и dec числами. Мне прям трижды захотелось обрести настоящий RPN калькулятор от HP. Но цена на такие калькуляторы очень кусается. Для примера — обычный научный калькулятор можно купить за 2-3 тысячи рублей, а RPN калькулятор будет стоить сразу под десять тысяч — за БУ.
Задняя крышка HP-16C
Но есть ли выход? Если хочется экономии, но интересна польская нотация, то можно взять себе БУ советскую альтернативу, программируемые калькуляторы: «Электроника Б3-34», «Электроника МК-52», «Электроника МК-54», «Электроника МК-56», и, конечно же, «Электроника МК-61».
Изначально я рассматривал модель калькулятора «Электроника МК-56» за то, что он такой большой и удобный, но мне показалось, что его ценник немного не бюджетен для целей «поиграться», поэтому я взял себе МК-61 в полном комплекте в состоянии нового, за какие-то смешные деньги.
❯ RPN калькулятор «Электроника МК-61»
На мой взгляд, это самый доступный RPN калькулятор для всех любителей на постсоветском пространстве. Есть и другие модели, которые я перечислил выше, но этот встречается чаще всего. Их можно легко взять в состоянии нового за за вполне доступную стоимость. При этом — это прекрасный калькулятор с богатыми возможностями, мало уступающий большинству калькуляторов HP в этой статье.
Явно, что создатели этой серии калькуляторов вдохновлялись техникой HP, даже именования регистров и цветовая гамма кнопок тут такие же, как у калькуляторов HP. Однако, это вполне себе самостоятельная ветвь, с кучей своих особенностей, архитектуры.
Самое приятное, что под эту серию калькуляторов, есть просто громадное количество литературы на русском языке, которые позволят быстро его освоить и эффективно использовать.
Калькулятор мне удалось купить в полной комплектации в родной коробке, в состоянии нового.
Родная коробка
В лучших традициях советских приборов, кроме инструкции, там были все принципиальные схемы, на все узлы, включая блок питания.
По-настоящему ценное что было в комплекте, кроме самого калькулятора — это руководство по эксплуатации. Это прекрасная книга, которая научит пользоваться RPN калькуляторами.
Иронично, что я даже поначалу не понимал как на нём сложить два числа, но постепенно, читая документацию, и проникаясь обратной польской записью, я начал осознавать всю громадную мощь, скрытую в этом гениальном устройстве. Даже смог отправить калькулятор во тьму. Тьма — это состояние калькулятора, когда он работает, но ничего не показывает.
1 ВП 70 F X F X F X
При этом он может делать вычисления, но мы о них не узнаем.
Исследование ошибок в калькуляторах называется еГГогология, потому что на калькуляторе ошибка писалась словом еГГог (error).
К главным недостаткам, конкретно этой модели калькулятора, хочу отнести невозможность сохранить программу — после выключения питания калькулятора. У всех остальных устройств в этой статье такая возможность есть.
Итак, если кто-то хочет бюджетно приобщиться к теме RPN-калькуляторов, смело рекомендую вам отечественные программируемые калькуляторы. Для тех же, кто не хочет ничего покупать, доступен очень достойный эмулятор online. Но, из личного опыта, не то ощущение, хотя я его с успехом использовал для отладки своих программ.
❯ HP-32S
Этот калькулятор — мой фаворит в подборке. Мне удалось купить его со скидкой на известных досках объявлений, конкретно мой экземпляр произведён в 1987 году.
У этого устройства достаточно классический вид именно калькулятора, к которому я привык, учась в институте. Это программируемый калькулятор, с просто потрясающей документацией, лучшей, на мой взгляд, из всех моделей, с которыми мне довелось познакомиться.
Этот калькулятор относится семейства калькуляторов:
HP10B/14B/17B/17BII/19BII/20S/21S/22S/27S/28S/32S/32SII/42S
Среди которых не только научные, но и финансовые калькуляторы, продающихся в обычных магазинах. Буду честен, именно с этим устройством я провозился больше всего, и именно на нём я учился программировать, перенося программы с отечественных калькуляторов Б3-34 на эту модель, попутно разбираясь в отличиях отечественных гаджетов от импортных.
Например, интересная особенность этого калькулятора: у него нельзя перейти с помощью номера строки, как это было в МК-61, а только используя буквенную метку. А с начала буквенной метки, обозначаемой LBL, начинается новая нумерация. Любой переход gto (goto) после условия if или вызов подпрограммы, и начинается новая цифробуквенная нумерация, что, на мой взгляд, не очень удобно.
Но, с другой стороны, это неудобство компенсируется большим интерактивом с пользователем, когда можно выводить значение конкретной переменной, например, «X=10», и запрашивать ввод нужной переменной «Z=?».
Ниже пример такой программы. Как можно видеть, каждая метка меняет нумерацию и буквенный индекс. И тут же виден интерактивный ввод отдельных переменных от пользователя, что очень удобно.
Ещё одним отличием, от того же МК-61 (и всего семейства Б3-34), то что в отечественных калькуляторах выполняется строка после условия, если условие не истинно (что просто ломает мозг обычному программисту), а в этом калькуляторе, если истинно, то есть как мы привыкли.
Вообще, калькуляторы этой серии очень удобные, и как гласит википедия, HP-42S пользовался на аукционах таким большим спросом, что купить его было практически невозможно.
Есть проект эмуляции этой серии калькуляторов, который вполне успешно работает и я использую его даже в своём телефоне на Андроид. Так, что если вы хотите приобщиться к прекрасному, совершенно необязательно его покупать, можно попробовать прямо в вашем смартфоне.
В общем, калькулятор невероятно прикольный и удобный, его прям по-настоящему хочется везде таскать с собой, в отличие от других моделей, который либо слишком громоздкие, либо очень маленькие.
❯ HP-12C
Этот тип калькулятора достаточно распространён в нашей стране, и доступен за адекватные деньги на всех досках объявлений. Мне он понравился тем, что больше всего похож на те «классические» калькуляторы, с которых я начал погружению в эту тему: HP-10C HP-11C, HP-15C, HP-16C, называемые серий 10C.
Эта модель калькулятора (конкретно у меня HP-12C Platinum) имеет самую долгую производственную историю. Выпускался с 1981 года по 2006 год, и считается стандартом среди финансовых специалистов. Даже в книжке, которая шла с ним в комплекте, разбираются именно финансовые примеры его применения. Как мне рассказали, что именно эту модель используют при сдаче CFA международный профессиональный сертификат, выдаваемый CFA Institute финансовым аналитикам, которые успешно сдали экзамены и удовлетворяют требованиям по образованию и опыту работы.
С точки зрения программирования он тоже весьма необычен. Например, каждое нажатие на клавишу записывается в ячейку памяти, и программа, по сути, представляет собой набранные клавиши, которые соответствуют функции. Ещё одна забавная особенность, что на дисплее отображается номер клавиши в ряду и столбце.
К минусам могу отнести: отсутствие математических операций, а главное, всего два условия для переходов«x<=y» и «x=0», что сильно урезает возможности программирования, либо делает программу очень сложной и неинтересной. Поэтому сильно погружаться в программирование конкретно этой модели не стал.
Однако ниже приведу хороший пример, как на программируемом калькуляторе можно сделать расчёт тригонометрических функций, если он такого не умеет.
Расчёт синуса на HP-12C
Как уже сказано выше, HP-12C — это финансовый калькулятор, и он не умеет считать тригонометрические функции. Однако, даже на нём можно произвести расчёт синуса, косинуса, тангенса и т.д., с помощью аппроксимирующего полинома.
График аппроксимирующего полинома и синуса
Таким образом, используя этот аппроксимирующий полином, синус можно вычислить от минус 0,5∙π, до плюс 0,5∙π, с достаточно высокой точностью.
Программа для калькулятора HP-12C будет выглядеть следующим образом:
command display [f] PRGM 00- (для удаления существующей программы) STO 9 01- 44 9 Enter 02- 36 * 03- 20 . 04- 48 0 05- 0 0 06- 0 7 07- 7 6 08- 6 1 09- 1 * 10- 20 . 11- 48 1 12- 1 6 13- 6 6 14- 6 0 15- 0 — 17- 30 RCL 9 18- 45 9 * 19- 20 RCL 9 20- 45 9 * 21- 20 1 22- 1 + 23- 40 RCL 9 24- 45 9 * 25- 20
После ввода нужно нажать [f] P/R, чтобы покинуть режим программирования.
Сделал себе табличку с рассчитанными значениями синуса, чтобы проверить корректность расчёта:
Считаю, что лучше один раз увидеть, чем десять раз прочитать как же это работает.
Для оценки разбега погрешности, посчитал интеграл по модулю, общей разницы между sin(x) и этим полиномом в заданном диапазоне. Ошибка аппроксимации получилась 2,17*10-4, что для бытовых применений вполне достояно. Разумеется, это не погрешность конкретного расчёта, это сумма всех погрешностей.
График аппроксимирующего полинома и синуса
Игры для HP-12C
Игры для калькулятора делали не только в СССР, но и на западе. Например, в этом документе приводятся несколько игр для калькулятора HP-12C. Из них я пробовал FRUIT MACHINE.
При попытке ввода этой программы, сделал неприятное открытие: на моей модели калькулятора, при указании адреса ячейки, надо ставить ноль. То есть, если записано [g][GTO]36, то должно быть [g][GTO]036, а иначе нельзя ввести эту команду. Как играть в эту игру я так и не понял, по идее, это эдакий игральный автомат или казино. Возможно, что программу ввёл с ошибкой.
Из забавного, кто-то перенёс программу «Лунолёт-1», которая была опубликована в журнале «Техника молодёжи» 1985 №6, с.52-57, на калькулятор HP-12C. Игра приведена в этом же документе.
Желающие потыкать этот калькулятор, вполне могут воспользоваться онлайн-эмулятором, например этим.
Я так подробно остановился на этой, на мой взгляд, неудачной модели, потому что она самая доступная на сегодняшний день из калькуляторов HP на нашем рынке.
❯ HP-41C
Последний в моём обзоре калькулятор — это HP-41C. Настоящая легенда калькуляторостроения, у меня даже язык не поворачивается назвать это устройство калькулятором. Несмотря на то, что у него классический вид калькулятора, это устройство имеет модули расширения памяти, подпрограмм, есть возможность подключения множества устройств, например принтер или мультиметр. Фактически — это карманный персональный компьютер, который был создан в 1979 году, за год до отечественной «Электроника Б3-34».
Мне досталось устройство, оснащённое модулем чтения магнитных карт, для чтения и записи программ, модуль программ и методов для термических расчётов (давление, температура, переводы единиц) и модуль расширения памяти. К сожалению, ни специальных магнитных карт, ничего более у меня не было.
Калькулятор питается от хитрых батареек, которые выглядят как обрезанные пальчиковые:
Модули калькулятора и батарейный отсек.
На хабре уже была прекрасная статья от frog «Архитектура и программирование микрокалькулятора HP-41» и, на мой взгляд, она достаточно полно описывает возможности этого устройства.
Напоминаю, что калькулятор был изготовлен в 1979 году, когда только у горстки избранных дома был компьютер, а это устройство на тот момент выглядело просто космическим аппаратом.
Для этой модели существует громадное количество модулей расширения, и его можно подключить к отдельной шине HP-IL, к которой можно соединять калькулятор с мультиметром, принтером и прочим.
Мной найдено прекрасное видео демонстрации работы с этим калькулятором. Это замеры ёмкости батарей и печать результата на принтере, при этом всем управляет калькулятор HP-41C:
На данный момент я разрываюсь между тем, чтобы не погрузится в пучину изучения этого невероятного устройства и тем, чтобы не потратить громадное количество денег на модули для него.
Самое интересное, что несмотря на то, то калькулятор был выпущен в 1979 году, и давно снят с производства, энтузиастами для него делаются различные модули, например, и у него достаточно развитое сообщество. Даже попадался проект, где люди пилят новую аппаратную начинку к этому калькулятору, и, последние новости по нему датируются этим годом!
В общем, это устройство — настоящая легенда, совершенно неизвестная в нашей стране.
❯ Полезная литература
Вне зависимости от того, какой калькулятор вы подберёте для своей работы, хочу посоветовать две занимательные книжки.
Одна из них — детская, но с весьма взрослым посылом. А.Г. Гайшут «Калькулятор твой помощник и соперник в играх«.
В книге в игровой форме рассказывается о том, как работает RPN-программируемый калькулятор и приводится множество классных программ.
Выше часть первой главы, где на картинке сразу приводится пример программы расчёта катета треугольника. Весьма взрослый подход.
В книге мне не хватило разбора принципов работы некоторых программ, и я даже искал другие публикации автора, где бы он более детально разбирал эти моменты, но к сожалению, не нашёл. Была мысль связаться с автором, и у него даже есть свой сайт, но он умер в 2014 году.
Другая книга В.П. Дьяконов «Справочник по расчётам на микрокалькуляторах» издательство «Наука» 1989. Обратите внимание на год выпуска, более ранние книги не содержат ценную информацию об иностранных калькуляторах.
Книга интересна по нескольким моментам:
- Приводится информация по различным калькуляторам, как отечественным — из серии Б3-34, так и иностранным, как — HP-11C, HP-15C, TI-58C.
- Много методического материала по реальным математическим расчётам, что может быть полезно как студентам, так и людям, которые делают расчёты в поле.
Оглавление книги
Для меня очень полезной оказалась таблица калькуляторов HP, приведённая в этой книге. По ней я и начал поиск калькуляторов на досках объявлений.
В ней же достаточно полно приводятся сведения и том, как программировать эти модели калькуляторов. Информация не заменит официальную документацию на изделие, но вполне неплохо её дополнит.
Сравнение распечатки HP-15C и живого калькулятора HP-12C
Эту книгу мне уже не удалось найти в электронном виде, поэтому пришлось покупать, рекомендую.
❯ Итог
Могу сказать прямо: программируемые калькуляторы с обратной польской нотацией меня совершенно потрясли. Это какие-то удивительные устройства, с совершенно другим стилем счёта и программирования, буквально вычислитель в кармане. Да, я понимаю, что у каждого есть сейчас смартфон, у меня в телефоне даже стоит питончик для удобства решения задач. Однако, живые кнопки всё ещё удобнее, чем гладкий экран, а особая магия ввода и решения задач на RPN-калькуляторах просто приводит меня в восторг.
Сейчас пытаюсь уговорить себя остановится и перестать скупать эти устройства, но моё нутро уже мечтает о новом калькуляторе модели HP-15C, и я даже высматриваю где и как его прикупить.
В этой подборке меня больше всего пугает пучина невероятной мощи калькулятора HP-41C, который имеет множество средств расширения возможностей, позволяет подключать свои устройства. А, главное, к нему можно делать свои модули и писать для него программы!
❯ Полезные ссылки
- Собираем собственный эмулятор калькулятора HP (англ.).
- Аппроксимация функций синуса и косинуса на калькуляторе HP-12c (англ).
- Эмулятор калькулятора «Электроника МК-61».
- Non-Hewlett Packard RPN Calculators.
- Обзор коллекции RPN-калькуляторов (англ.)
- Музей калькуляторов HP (англ.).
- Игры для калькулятора HP-12C.
- Эмулятор HP-12C.
- habr «МК-61: история, эмуляция, устройство».
- habr «Архитектура и программирование микрокалькулятора HP-41».
Если вам интересна металлообработка, старое железо, всякие DIY штуки, погроммирование и linux, то вы можете следить за мной ещё в телеграмме.
Возможно, захочется почитать и это:
- ➤ Измерение скорости чтения-записи носителей с помощью утилиты dd
- ➤ Осциллограф из рассыпухи на светодиодной матрице. Разбор схемы в Proteus
- ➤ Сам написал, сам поиграл: как работали трёхмерные игры на кнопочных телефонах нулевых? Пишем 3D-шутер с нуля
- ➤ Как запустить собственную GSM-сеть за пять минут при помощи SDR
- ➤ Grand Theft Auto III – новое измерение в мире гейминга
Теги:
- timeweb_статьи
- калькулятор
- калькулятор hp
- мк-61
- программируемый калькулятор
- история калькуляторов
Хабы:
- Блог компании Timeweb Cloud
- Ненормальное программирование
- История IT
- Старое железо