Программируемые микрокалькуляторы Hewlett-Packard (HP)

Материалы о программируемых микрокалькуляторах Hewlett-Packard.

См. также фирменный материал «Обратная польская запись, основные сведения об обратной польской записи».

HP GCC и C++

Пакет HPGCC для разработки программ под ПМК серии HP-48/49/50 на языке Си может также с небольшими изменениями настроек использоваться для программирования на C++.

Вначале необходимо скачать и установить пакет для разработки (http://sourceforge.net/projects/hpgcc/). В него входят компиляторы GNU, библиотеки, заголовочные файлы, исходники и собственно простая среда разработки на базе Programmer Notepad. Качаем здесь: Windows, Linux.

Предположим, вы установили пакет в каталог C:\HPGCC. В корне лежит файл "Default_Makefile". Сделаем его резервную копию, затем запустим нашу среду (Start -> HPGCC 2.0 for Windows -> HPGCC Programmer's Notepad) и откроем в ней Default_Makefile-файл. Делаем замену ".c" на ".cpp", а к опциям компилятора (строка 66, ARM_ELF_CFLAGS=...) добавляем "-fno-rtti -fno-exceptions" и сохраняем.

Создаем в среде новый файл, скопируем в него текст из примера "Hello, world!" (examples\hiworld.c). Сделаем небольшие изменения: обернем include главного заголовочного файла.

#ifdef __cplusplus
#define size_t long unsigned int
extern "C" {
#endif
#include <hpgcc49.h>		// the standard HP lib
#ifdef __cplusplus
}
#endif

Разумеется, есть способы поэлегантнее, например, внести эту обвязку в отдельный заголовочный файл вроде hpcpp.h, включая его в свои исходники. В рамках нашего обзора это не столь уж и важно.

Сохраняем файл под именем, например, hello2.cpp и жмем Ctrl+F7. Компиляция и сборка проходят успешно.

Теперь проверим "сиплюсплюснутость" :) Добавим перед основной функцией простенький класс.

class MyClass
{
public:
	MyClass() {}
	void SayHello()  { printf("Hello, World!"); }
};

Однако, попытка компоновки вызывает ошибку: не определены основные операторы работы с памятью в Си++: new и delete.

Это понятно, т.к. компоновать нужно с С++-библиотеками типа libsupc++.a или libstdc++.a. Первая из них доступна на том же сайте HPGCC, но пока не входит в пакет и является неофициальной.

Тем не менее, разработчики подсказывают, что если просто руками добавить соответствующие операторы, то выделение памяти будет работать и в существующем пакете.

Добавляем операторы перед нашим классом. Полный текст программы будет выглядеть так.

#define TINY_PRINTF

#ifdef __cplusplus
#define size_t long unsigned int
extern "C" {
#endif
#include <hpgcc49.h>		// the standard HP lib
#ifdef __cplusplus
}
#endif

void * operator new(size_t size)
{
	void *ptr = malloc(size);
	return ptr;
}

void * operator new[](size_t size)
{
	void *ptr = malloc(size);
	return ptr;
}

void operator delete(void *p)
{
	free(p);
}


class MyClass
{
public:
    MyClass() {}
    void SayHello()  {printf("Hello, World!");}
};

int main(void)
{
    clear_screen();
    MyClass *hello = new MyClass();
    hello->SayHello();
    WAIT_CANCEL;  // loop until ON pressed
    delete hello;
}

После компиляции и компоновки в каталоге исходного файла должен появиться "hello2.hp" для выполнения на конечном устройстве.

Если физического устройства нет, можно воспользоваться мощным эмулятором ПМК серии HP-48/49/50 под названием Debug4x, детально показывающим даже внешний вид калькулятора. Его можно загрузить на сайте разработчиков (англ.яз.): http://www.debug4x.com. Эмулятор, кстати, написан на Delphi.

Lua для калькуляторов HP, TI и CASIO

Для HP 49g+, HP 50g, TI-89 и CASIO ClassPad есть реализации ЯВУ Lua.

Доброе Утро !

Жаль, нет питона для HP-50g. Сколько можно было бы скриптов запустить... SysRPL - весьма мрачная "вещь в себе", ассемблер x86 или, тем более, PDP-шных машин, покажется веселее.

Для HP 49g+, HP 50g, TI-89 и CASIO ClassPad есть реализации ЯВУ Lua ( HPLua, Lua89 и CPLua, соответственно ) :

http://www.lua.org/

Lua (programming language)
http://ru.wikipedia.org/wiki/Lua
http://en.wikipedia.org/wiki/Lua_(programming_language)

HPLua для HP 49g+, HP 50g
http://www.voidware.com/hplua/index.php?title=HPLua
HPLua, Lua for HP Calculators HP49g+ & HP50g
Download Now!
hplua-1.0.1.zip (1.0 MB)

http://sourceforge.net/projects/hplua/

Lua89 для TI-89
http://lekernel.net/scrapbook/old/lua.html
http://lekernel.net/scrapbook/old/download/lua89-5.0.2-1.tar.bz2
http://www.ticalc.org/archives/files/fileinfo/358/35869.html
http://www.ticalc.org/pub/89/asm/programs/kernel/lua89.zip

CPLua для CASIO ClassPad
http://www.casiocalc.org/?showforum=19
Project: Cplua
http://www.casiocalc.org/?showtopic=2314
Download Cplua
http://www.casiocalc.org/?showtopic=2364

8-queen C-> Cplua
http://www.casiocalc.org/?showtopic=3217

Тест "8 ферзей" для HP 50g и CASIO ClassPad 300 PLUS :

http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=700

Calculator Benchmark 
Posted by Xerxes on 12 Feb 2007, 7:35 a.m.
Calculator Speed Benchmark using the N-Queens Problem

 Lua
-----
 local a,r,s,t,x,y,n
 for n=1,100 do
   r=8
   s=0
   x=0
   a={}
   repeat
     x=x+1
     a[x]=r
     repeat
       s=s+1
       y=x
       while y>1 do
         y=y-1
         t=a[x]-a[y]
         if t<0 then
           t=-t
         end
         if (t==0) or (x-y==t) then
           y=0
           a[x]=a[x]-1
           while a[x]==0 do
             x=x-1
             a[x]=a[x]-1
           end
         end
       end
     until y==1
   until x==r
 end
 print(s)

 -    2:20         ClassPad 330      Formula / List / Ver.3.3
 -    2:08         ClassPad 300+     Formula / List / Ver.2.2
 -    1:30         HP-50G            UserRPL
 -    1:29         TI-Nspire         Formula / List / TI-84+ Keypad / Ver.3.0
 -    1:13         TI-Nspire         Formula / List / TI-84+ Keypad / Ver.1.2
 -    1:10         TI-Nspire         Formula / List / TI-84+ Keypad / Ver.1.3
 -       8.3       TI-Nspire CAS     Formula / List / Ver.1.2
 -       7.5       TI-Nspire         Formula / List / Ver.1.2
 -       4.2       TI-Nspire CAS     Formula / List / Ver.1.3
 -       3.9       TI-Nspire         Formula / List / Ver.1.3
 -       2.3       TI-Nspire CAS     Formula / List / Ver.3.0
 -       2.1       TI-Nspire         Formula / List / Ver.3.0
 -       1.10      ClassPad 300+     Lua / CPLua 0.8 / Bytecode
 -       0.915     HP-50G            HP Pascal Studio 2.1 / Cross Compiler
 -       0.243     HP-50G            Lua / HPLua 0.4 / Bytecode
 -       0.125     TI-Nspire CAS     Lua / Bytecode
 -       0.120     TI-Nspire         Lua / Bytecode
 -       0.0504    TI-Nspire CAS     Lua / Bytecode / OS 3.1
 -       0.0445    TI-Nspire CX CAS  Lua / Bytecode / OS 3.1
 -       0.000484  HP-50G            C / RegVars / HPGCC 3.0 / Cross Compiler
 -       0.000404  HP-50G            Assembly / ARM9 @ 75 MHz

8-queen C-> Cplua
http://www.casiocalc.org/?showtopic=3217

ClassPad 300 PLUS ускоряется в 116 раз; HP 50g - в 370 раз.

_________________
Dima Masalov
FIDO-NET - 2:461/640.9 AKA 2:461/43.9
E-MAIL - mds at ire dot kharkov dot ua

Pascal для HP-48

В дискуссии всплыла тема питона, как скриптового языка и среды исполнения для ПМК. Питона, насколько я знаю, для HP нет. Но есть, например, паскаль.

Ссылки:
http://djludo.online.fr/home/pages/hp_pascal.htm
http://hppascal.free.fr/pages/home.htm

Выбор "модель калькулятора - класс школы/курс ВУЗа" от HP

Матрица показывает оптимальные с точки зрения производителя (Hewllet Packard, HP) модели калькуляторов для разных классов средней школы и курсов ВУЗа.

Пояснения.
Слева идут номера моделей калькуляторов HP, сверху - классы средней школы и курсы ВУЗа (Франция).
Collége соответствует советским 4-7 классам (не в курсе, какие они по номерам в новой системе)
Lycée - 8, 9 и 10 выпускной классы (советская 10-летка)
BAC+1/+2 - первый/второй курсы ВУЗа (у нас называлось ОТФ - общетехнический факультет)
BAC+3/+4 - 3 и 4 курсы (бакалавриат)
BAC+5/+6 - 5 и 6 курсы (магистратура)

Темно-синим цветом в середине выделена область программируемых калькуляторов (включая модели с обратной польской нотацией RPN). Голубым наверху - инженерные алгебраические числогрызы. Внизу циановым отмечены квадратики моделей для финансовой математики и статистики.

Исторический экскурс по калькуляторам Hewllet Packard 70-х годов

Обнаружил весьма интересный, на мой взгляд, обзор истории развития ПМК от HP - пионеров этого направления. Авторский текст привожу без правок, без закругления полемических углов. В конце заметки публикую последовавшую по итогам нашу небольшую дискуссию.


В очередной раз на очередном форуме прочитал: "Не все так плохо было у нас. Если и отставали от TI, HP и Casio, то года на два-три (и то, имхо это не с разработкой связано, а с выпуском, привязаным к пятилеткам)." Несколько лет мне было лень, но сейчас молчать уже не могу. Расскажу про программируемые HP - мне это ближе.

1974.
Итак, в 1974 году выходит HP-65 - первый в мире программируемый калькулятор.
Конечно же, обратная польская запись. Сто (100) шагов программы, девять регистров. Правда, практически любое нажатие клавиши, даже каждого из трех шифтов, занимает отдельный шаг - шаги у него шестибитные, в один шаг много не всунешь. Причем таблицу кодов учить не нужно - коды совпадают с положением на клавиатуре. Внутри, конечно, они преобразуются в шестибитные шаги (а склеивающиеся коды типа чтения-записи в регистр - по два в один шаг), но пользователю это не видно и не особо интересно.

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

Благодаря наличию меток можно удалять команды из середины программы, не набивая весь остаток заново (а замены нет вообще, только вставка). Правда, эта функциональность очень странная и смешная: для удаления надо сначала нажать один из шифтов, он немедленно вставляется в код, и, если программа упирается в конец памяти, последняя команда теряется. Зато, так как по шагам можно ходить только вперед, а назад нельзя, иногда легче удалить несколько команд и потом вставить заново, чем идти с самого начала или от ближайшей буквенной метки :)

Проверка условий тоже сделана довольно забавно - если условие не выполняется, то управление перескакивает на два шага вперед. А если выполняется, то идет на эти самые два шага, где может быть, например, переход или короткое действие.

А, да, чуть не забыл. МАГНИТНЫЕ КАРТЫ! Именно с них вроде как грузили программы расчета коррекции курса при стыковке "Союза-19" и "Аполлона" (у нас подобное безумие запланировали только как резерв в 1988 году на "Союзе ТМ-7" и МК-52, да и то, кажется, не пригодилось). Для простых людей, естественно, они тоже были полезны - сначала на них сохраняли свои программы, потом ими менялись, а потом покупали готовые пакеты, которые выглядели как немаленьких размеров книжка с маленькой коробочкой.

Стоила вся эта радость $795, хотя по сравнению с другими программируемыми устройствами того времени это было очень по-божески.

Калькулятор стал настолько популярным, что уже через несколько месяцев после выпуска энтузиасты начали выпускать и распостранять по почте ежемесячный самиздатовский журнал. Первый номер, правда, занимал всего две страницы, но со временем объем дошел до полусотни-сотни страниц.

1975.
Через год после HP-65 был объявлен HP-55. Хотя выглядел он довольно похоже, внутри его зачем-то изрядно поменяли. Всего 49 шагов программы, зато зачем-то 20 регистров. Правда, преобразование единиц и статистические функции, но разве в них счастье?

Никаких меток больше нет. Все как мы привыкли, с номерами шагов и без вставок-удалений. Наконец-то сделали листание программы назад. Шаги наконец-то восьмибитные, поэтому команда перехода влезает в один шаг. Условий вместо четырех осталось только два, но теперь они совмещены с переходами и тоже влезают в один шаг. Зато чтение-запись в регистры занимает два шага вместо одного. Никаких магнитных карт нет, зато зачем-то есть таймер.

Но все же это $395 - в два раза дешевле. В самиздатовском журнале обсуждают HP-55 и пишут для него программы, хотя HP-65 намного популярнее. Отдельные личности мечтают о SUPER 65 с сохраняющейся памятью, тысячей шагов, сотней регистров, двумя шифтами с подвыподвертом (я серьезно), защитой от копирования, вводом-выводом звука и термопринтером.

А пока они мечтают, выходит HP-25, поменьше и попроще.

Шагов все так же 49, регистров осталось 8, зато любая функция с любыми шифтами и переход влезают в одну команду. Условия вернули как в HP-65 - с перескоком на шаг вперед. И условий теперь целых восемь - сравнение двух чисел и числа с нулем. Да, кстати, десятичная точка перестала занимать отдельный разряд.

Но так как он стоит $195 - спасибо новой платформе - и переносится одной рукой, спрос огромный.

А в самиздате тем временем забывают про HP-55, бодро программируют для двух остальных, фотографируют потроха HP-65 и собирают из рассыпухи принтер. И, понимая, что ждать SUPER 65 с энергонезависимой памятью пока бессмысленно, начинают мечтать о чем-нибудь типа HP-75, изменения в котором будут чисто косметическими - всего один лист A4 через один интервал. От безысходности даже появляется раздел по кстати вышедшему TI SR-52 аж с целыми 224 шагами и 20 регистрами.

1976.
Безысходность в самиздате нарастает. В майском номере любители HP-65 расправляются с любителями SR-52 и выгоняют их в их собственный самиздат. Ну какой толк, говорят, от удвоенной памяти, если решение квадратного уравнения занимает 110 шагов вместо 45? А разложение на множители - 162 вместо 90? И вообще у них корпус неудобный и кнопки мелкие.

И тут появляется лесник во всем белом. Во-вторых, в HP-25 добавляют, да-да, не шифты с подвыподвертом, а энергонезависимую память, называют эту штуку HP-25C и начинают продавать всего за $200. А во-первых...

224 шага! (естественно, одношаговые команды) 26 регистров! (правда, десять из них доступны с трудом) HP-67!
О командах в несколько шагов, загубивших те же 224 шага в SR-52, уже никто не вспоминает. При редактировании программы можно двигаться налево, направо и в другие стороны. Меток, повешенных на клавиши, уже не 5, а 10. Конечно же, никаких номеров шагов. Процедуры можно вызывать до трех уровней вложенности. А еще можно читать и писать на карты не только программы, но и куски программ или данные из регистров. И даже делать все это программно.
А еще косвенная адресация.
И еще настольный вариант с принтером HP-97.

Самиздат в восторге, фотографирует потроха, пишет "жизнь" (первая версия - 50 минут на поколение на доске 10x10), блэкджек и стартрек. А другие занимаются "еггогологией", она даже смешнее, чем у нас: они засовывают в HP-67 карты от HP-65 или вообще выключают питание на середине записи или включают на уже полупрочитанной карте. После того как искомый байт пойман, его можно записать на отдельную карту и делиться с друзьями :)

Да, кстати, стоил HP-67 $450, а HP-97 - $750.

1977.
Выходит замена для HP-25 - HP-29C с 98 шагами программы и 30 регистрами (14 опять доступны с трудом). Из HP-67 переползли метки (правда, только цифровые) с переходами, три уровня подпрограмм и косвенная адресация, а из HP-25C энергонезависимая память (кроме этих злосчастных 14 регистров).

Стоит $195, и опять есть HP-19C с принтером за $345.

И вот тут-то и появляется наш Б3-21, первоначально по 350 рублей. На первый взгляд он находится где-то между HP-55 и HP-25. Но:
- краткого исследования картинок достаточно, чтобы осознать пропасть в наборе функций, нет даже арктангенса;
- регистров только два (вместо традиционных четырех) стековых, семь нормальных и шесть кривых;
- шагов программы вроде бы больше, но из-за маленького стека приходится постоянно пользоваться регистрами, что раздувает программу.

Например, неполная гамма-функция занимает больше шагов, чем даже на HP-55, у которого двухшаговая работа с регистрами. А на HP-25 не только одношаговое чтение-запись регистров, но есть еще и одношаговая арифметика в них, что позволяет делать в его 49 шагах гораздо более интересные вещи.

И, куда ни ткнись, всюду отвратительные неудобства, даже адрес перехода приходится вводить по табличке. О глюках я лучше промолчу. Если кому-нибудь еще интересно, могу рассказать, что творилось в цивилизованном мире в 1978-1979 годах, пока у нас готовили Б3-34...

Оригинал заметки в ЖЖ автора tolstopuz


arbinada:
Хороший обзор.
Насчет 2-3 года - не слышал, а 5-6 лет - реальная цифра, собсно, вы к ней тоже приходите.
В условиях бурного развития рынка, кстати, задержка лет на 5 экономит массу усилий: не нужно воспроизводить то, что умерло за эти годы.
Сейчас, правда, говорить о задержке вообще не приходится в связи с отсутствием отрасли, как таковой.

tolstopuz:
в 1979 у них был hp-41c (с алфавитным жк дисплеем), а у нас б3-34 (хуже, чем hp-29c).
в 1982 у них hp-75c (бейсик), а у нас мк-54 (то есть вообще ничего нового).
а дальше у них в 1986 случилась маленькая революция - переход на rpl и выпуск легендарных 28 и 48. у нас же после выпуска мк-52 (потрясающий уродец, опять же на уровне моделей hp 1977 года) и мк-85 (аналог hp-75c) произошло не отставание, а тупик.
то есть общий итог получается такой - до 1986 года сделали три аналога далеко не лучших моделей 1978-79 года и одну с бейсиком. ничего даже близко похожего на модели 70-х(!) годов hp-41 и даже hp-67 сделано не было. про rpl я даже не говорю - это для нас просто ракетная техника.

arbinada:
RPL...
А оно нужно для калькуляторов? Там уже вполне компутерные задачки вырисовываются.
Действительно похоже на реактивный ранец за плечами, только что с ним делать в городе-то? :)) Лучше на велике или на авто.

По мне так и бейсик нафиг сдался (хотя опять же разница между hp-75с и мк-85 - 4 года). Бейсик - он для Excel хорош.

Алфавтный индикатор на hp-41c, если не ошибаюсь, только для вывода. С символьной информацией калькулятор не работал. То есть, да, удобнее читать сообщение "Ошибка" вместо ЕГГ0Г, но это не качественная разница.

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

tolstopuz:
любая методика программирования имеет некий запас расширяемости, за которым с ней становится работать очень неудобно. если вы заметили, абсолютную адресацию у hp имели только 49-шаговые калькуляторы. при большем размере программы правка, меняющая число шагов, становится мучительной, я сам отлично помню это на мк-54. система меток (буквенные для подпрограмм и цифровые для переходов) хорошо работает для нескольких сотен шагов, но с тысячами не хватает и ее. точно так же начинают мешать другие детские ограничения типа уровня вложенности подпрограмм.

еще более серьезная проблема возникает с библиотеками подпрограмм. во-первых, они наверняка либо находятся на одних и тех же шагах программы, либо используют одни и те же метки. а что еще хуже - одни и те же регистры. то есть подключить к своей программе две разные чужие подпрограммы невозможно - надо переписывать одну из них.

rpl как раз и был ответом на эти вопросы. никаких шагов, никаких однобуквенных меток, никаких нумерованных регистров - только именованные переменные и ограниченный только объемом памяти стек. а переменные (и стековые регистры) могут хранить не только числа, но и строки, массивы и программы.

идея оказалась настолько удачной, что бейсик действительно нафиг сдался.

(кстати, главный недостаток мк-152 именно в том, что количество шагов просто зашкаливает для модели программирования, оставшейся от мк-52. представьте себе, как будет выглядеть использование чужой подпрограммы из 1000 шагов, если один из регистров занят другой подпрограммой из 500 шагов, да и номера шагов перекрываются.)

hp-41c имел на клавишах полный английский алфавит, один специальный регистр на 24 символа и возможность хранить по 6 символов в числовых регистрах. но главное не это, а объем памяти - 200 шагов и 63 регистра (которые можно отдать и под шаги программы, что увеличит их до 441), а если докупить модуль расширения, то уже 319 регистров и 1000 шагов (2231, если отдать все регистры под программу). это принципиально новая вычислительная мощность для калькулятора. вон, например, покер:
http://www.hpmuseum.org/software/41/41poker.htm

arbinada:
Со всем этим трудно не согласиться.
Просто я стою на позиции, что "калькулятору - калькуляторово", поэтому заниматься интеграцией подпрограмм да еще от разных авторов - это какое-то неправильное занятие для рядового пользователя, пусть даже и продвинутого. Авторам прикладных пакетов - да, но они спокойно разберутся в коллизиях при сборке (этакая ручная линковка, которую, несомненно, можно заменить более интеллектуальной автоматической процедурой на полноценном компьютере).
А рядовой просто возьмет машинку в руки, введет/загрузит готовую программу и сделает с ее помощью свое дело.

Судя по фронтальном виду hp-41c с символьной информацией он все-таки не работал (в смысле функций обработки, из программы "Покер", где 5 регистров используются для отрисовки 5 вариантов скрытых карт, это тоже видно), а ввод там был гораздо более убогим, чем, нынешние манипуляции SMS на мобилах. То есть, все-таки, эта фишка использовалась для удобства вывод информации пользователю.

tolstopuz:
ну да. загрузит готовую программу для решения системы дифуров, а потом загрузит готовую подпрограмму для специальной функции, используемой в его дифуре. и на rpl у него не будет никаких проблем.

без возможности оперировать со сложными данными как с единым целым работа с матрицами превращается в мучительное перетасовывание регистров. а на hp-48 рядовой пользователь просто возьмет машинку в руки, загрузит готовую программу и получит библиотеку линейной алгебры, где операции над матрицами делаются так же просто, как над числами, и массив собственных значений считается одной функцией, причем одной и той же для любого размера матрицы, лишь бы хватило памяти и терпения.

разве не для этого существуют калькуляторы?

символьные операции в hp-41c, конечно, убогие, но почему убог ввод при наличии полного алфавита, никак не пойму.

Накопитель данных на HP48GX/HP49G. Интерфейс RS-232

Описание использование калькуляторов линейки HP 50/49/48 для задач приёма, хранения и обработки данных в полевых условиях.

Сведения

Электронный теодолит и ноутбук.
Тяжело и неудобно работать.

Вам не приходилось записывать данные из COM порта в файл? А в полевых условиях (ночью, на улице)?

Современные геодезические приборы, GPS приемники и др. имеют возможность записи результатов измерений во внутреннюю память и в порт RS-232, могут проводить сложные вычисления.

Но если пользователю потребуется провести заранее не предусмотренные вычисления, сохранить данные в своем формате и т.п., то потребуется внешний компьютер. Часто в полевых условиях используют ноутбуки, но у них большая масса, а заряда батареи может не хватить на рабочую смену. Можно использовать внешние аккумуляторы (растет масса!).

Работа геодезиста в принципе связана с постоянным переходом между объектами измерения, поэтому крайне важно уменьшить массу и размеры накопителя данных. Любой отказ накопителя приводит к потере рабочего времени, поэтому сбоев быть не должно. Пользователи не разбираются в компьютерах, поэтому интерфейс программы и порядок работы должны быть максимально простыми.

Из всего этого следует, что нужен маленький и легкий накопитель данных с возможностью вычислений, записи данных в файл и со связью по RS-232. Этим требованиям соответствуют графические калькуляторы серии HP-48 и HP-49. Их можно купить в России.

3 батареи ААА в зависимости от режима (COM-порт, звук) работают от месяца до года (и больше).

Заметим, что сейчас полно разных карманных ПК, но многие ли умеют программировать на них? Встроенный язык UserRPL HP48/49 довольно прост, можно скачать пример рабочей программы. Можно программировать и на SysRPL, на ассемблере, но это гораздо труднее.

Единственный недостаток применения такого калькулятора - требуется сравнительно высокая квалификация того, кто будет работать с таким накопителем :(. Но вообще все, с кем я работал, смогли его освоить. Кроме того, в новейших (и дорогих) геодезических приборах уже встроен аналогичный накопитель.

Научный программируемый калькулятор

HP-48GX

Память 128 (до 1,128) кБ
Графический экран 131x64 точек
Языки программирования HP Basic, RPL (Lisp), SysRPL, ассемблер
Многочисленные встроенные математические функции
Файловая система
Двумерная и трехмерная графика
Размер 8.9x18.7x2.8 см
Последовательный порт: RS232 (провод продается отдельно)
Клавиатура: 49 кнопок
Масса: 264 г.

HP-49G

HP-49 - более новая модель.
1.5 Mb памяти, Flash ROM,
нет IR-порта, нет возможности расширения памяти
51 кнопка, надежный корпус.

Программирование

Необходимы начальные знания основ HP-48/HP-49, чтобы повторить этот пример. Программу на языке RPL (LISP) можно ввести прямо с клавиатуры HP и сохранить в файл для дальнейшего быстрого вызова.

Программа инициализации COM-порта.

Программа отправляет строку символов + CR + LF в COM-порт

Программа получает строку символов из COM-порта и показывает ее на экране. Размер буфера 255 символов.

Если соединить ПК и калькулятор проводом (самодельным или фирменным), то можно передавать данные.

Результаты приема данных калькулятором размещены в т.н. стеке, и могут быть сохранены в файл.

Сохраним строку в файл.

В HP-48/HP-49 есть встроенный файловый менеджер.

В файловом менеджере можно просмотреть полученный файл.

Просмотр.

Обмен данными с компьютером

Для обмена данными с ПК нужно запустить в калькуляторе Server и использовать программа для передачи данных в ПК.

Программа для передачи данных в ПК (входит в набор для связи с компьютером). Ее можно скачать на www.hp.com.

Применение

Приведу пример практического использования накопителя. Из прибора при измерении получаем текстовые данные в известном формате:

81..00+00003596 82..00-00007783 83..00+00001324 32..00+00008574
812.00-00000027 822.00-00000013 832.00+00000001 32..00+00008753
21.103+16181600 22.103+08178800 32..00+00008766 33..00+00001408
21.103+16181600 81..00+00002736 82..00-00008328 32..00+00008766
11....+00000000 21.103+16181500 22.103+08178900 31..00+00008856

Наша задача перебрать их и записать в файл в памяти накопителя:

%%HP: T(1)A(R)F(.);
"File started at 22.28 13.032001
200 31388 16793 -114 35598 M8 22.29 XYZgp
200 -1568 -2034 -315 2568 M9 22.30 XYZgp
200 -1566 -2032 -314 2566 22.30 XYZgp
200 -38171 -7653 -105 38931 M10 22.31 XYZgp
200 -33912 -20809 50 39787 M11 22.32 XYZgp
200 -33155 -18373 -1651 37905 3 22.34 XYZgp
200 -20812 -11158 -1675 23614 3 22.35 XYZgp
200 -1835 287 -1640 1858 3 22.36 XYZgp
"

Получение, разбор данных и запись в файл делает моя программа на RPL.

Исходники

Пример рабочей программы на языке RPL.

Где взять HP-48/HP-49?

www.price.ru

Ссылки

В Интернете много софта под HP-48/HP-49. Есть эмулятор, среда разработки на SysRPL, множество исходников. Исходники можно взять на сайте www.hpcalc.org. Ключевые слова для поиска в Интернет - HP-48, HP-49, RPL, SysRPL, EMU48, EMU49, DEBUG2, Visual RPL, HORN.

Источник (автор не указан): http://emb.hut.ru/hp48/hp48-49.html

Русский алфавит в HP 50g

Если зайти в CHARS, то можно заметить, что символы можно редактировать. Появилась идея поместить на первых 24 пустых ячейках русские буквы. Нарисовал - работает. В инструкции сказано, что будет работать до первого ресета. Проверил - буквы стираются. Однако, выяснилось, что на пустых ячейках буквы можно нарисовать, только пользоваться ими будет нельзя - эти места зарезервированы (см. AUG приложения). Появилась идея написать русские буквы вместо букв с точками сверху и умляутами разными (я лично ими не пользуюсь и не собирался), начиная, например, с 192 номера. Теперь русские буквы можно писать где угодно, даже шорткаты есть. Как сохранять изменения (режим RPN):

FONT-> 'My.fnt' STO

И теперь записать строчку в STARTUP:
<< My.fnt ->FONT >> 'STARTUP' STO

Наши буковки сохранятся даже после рестарта! А My.fnt можно скопировать на SD-карточку. Сделал в итоге и прописные, и строчные буквы. Вместил весь алфавит, чтобы рядом все буквы были. Мой шрифт приложен (только сотрите расширение после скачивания, иначе не прикрепляется).

P.S. Обновил шрифт. Переставил буквы ж и ц, чтобы остались значки умножения и деления. Исчезла буква х, но ее всегда можно с клавиатуры написать. Изменил начертания букв с, э, ы и ю. Последние две - чтобы было межбуквенное расстояние в один пиксель. Раньше они сливались с последующей буквой.

Шнур RS-232 для HP 50g

Для стыковки HP 50g через последовательный интерфейс RS-232 необходим дополнительный кабель (прежняя модель HP 48 комплектовалась им для сопряжения с ПК, а HP 50 использует уже USB).

Приобрести кабель и нуль-модемный переходник можно на веб-сайте сообщества пользователей калькуляторов HP. Стоимость кабеля - 20 долларов, переходник можно взять в придачу бесплатно, доставка во Францию из США обошлась менее чем в 2 евро.

Как я и предполагал, подобный кабель нужен весьма ограниченному числу пользователей, посему он изготавливается небольшими партиями и может отсутствовать на складе. Например, во время заказа в начале марта я был уведомлен, что шнур будет доступен примерно к началу апреля. То есть, существует некоторая вероятность, что придется подождать недели 2-3. В реальности задержка составила 2 недели, посылка шла 4 дня.

Посылка умещается в небольшом пластиковом конвертике

Кабель и переходник

Язык Си для программирования HP 50g: плюсы и минусы

Тема использования языка Си и Си++ для разработки программ к ПМК уже затрагивалась в моей обзорной статье с примерами.

По ссылке - подробная и полная примеров статья (англ.яз.) об использовании компилятора HPGCC для создания программ к ПМК HP 50g. Я приведу только основные моменты, важные при выборе средства разработки.

В статье освещены две основные темы:

  1. Стремись к простоте, используй подходящий инструмент для работы. Си - не полная замена UserRPL. Например, функция на Си может потребовать много кода, чтобы реализовать аналог одной-двух команд UserRPL при обработке стека. С другой стороны Си быстрее, чем даже ассемблер Saturn-а (процессор прежних версий ПМК, в 50g он эмулируется, прим.пер.) для интенсивных вычислений. Код Си также легче читать, писать и отлаживать приложения с большим числом строк.

  2. Не изобретай велосипед. Есть много свободно доступных математических программ на Си. Большинство примеров в статье как раз сосредоточено на использовании такого свободно доступного Си-кода.

Почему Си?

  • Си выдает быструю, очень быструю программу.

  • Существует множество свободно доступного и качества математического кода и библиотек на Си. Это позволит вам сэкономить много времени.
  • Быстрая разработка и прототипирование. Каждый пример в статье была написана на компьютере, а затем перенесен на ПМК за несколько секунд.
  • Использование имеющихся навыков. Знание Си (в отличие от SysRPL и ассемблера Saturn) можно использовать практически в любом месте. Программирование для HP 50g на Си является примером т.н. встроенной разработки программ (embedded development). Кросс-трансляция, оптимизации размера, и навыки отладки имеют множество применений в других областях.
  • Переносимость. С небольшими усилиями вы можете перенести вашу 50g-программу на Си для ПК, Mac, КПК и даже калькуляторов TI (TIGCC).
  • Си, это, типа круто :)

Почему не C?

  • Последовательный порт и USB в настоящее время не поддерживаются.

  • Небольшие программы на UserRPL могут быть достаточными. Зачем создавать сложность? Используй подходящий инструмент для работы.

HPGCC

HPGCC является кросс-компилятором доступным на платформах x86 Linux, Mac, Windows; он способен создавать исполняемые файлы для процессора ARM HP 50g. HPGCC основан на семействе компиляторов GCC (GNU Compiler Collection).

Официально HPGCC 2.0SP2 поддерживает только C, однако Jean-Yves Avenard создал Mac и Linux версии, которые также поддерживают Си++. С небольшим усилием можно было бы добавить и другие языки, например Fortran. Представьте себе компиляцию существующих Fortran-программ для вашего 50g. Они, вероятно, будут работать быстрее, чем на компьютере, на котором были изначально написаны!

В отличие от UserRPL, SysRPL, и ассемблера Saturn, исполняемые 50g ARM файлы запускаются вне среды UserRPL 50g. Это имеет некоторые преимущества, например, скорость и доступ к памяти. HPGCC создает непрерывный блок памяти неиспользуемых портов "0" и "1" для приложений, а также есть добавляет 90 KB оперативной памяти неиспользованные операционной системой 50g. Это в общей сложности дает до 459 KB (если порты 0 и 1 пусты). Хотя исполняемые файлы 50g ARM запускаются за пределами UserRPL, всё еще можно взаимодействовать со стеком.

Ответственность

Вы используете компилятор на свой страх и риск. Хотя никто не сообщал о поломке их 50g при работе с HPGCC, думаю, что всё возможно. Я полагаю, худшее, что может случиться, это поломка кнопки аппаратного сброса из-за большого числа перезапусков. Должен же был я вас хоть чем-то напугать. Искажения линий в области пересканирования ЖКИ появлялись после аппаратного сброса, но после примерно 10 секунд они исчезали. Я не был этим напуган, потому что повторял и видел результат.

→ HP-50g

Материалы по калькулятору HP-50g

HP 50g + термопринтер HP 82240B

11 мая 2012 года, в самый разгар антипутинских выступлений, ко мне в Москву прибыл принтер и новый калькулятор, купленный взамен сломавшемуся. Как и ожидалось, блока питания в комплекте не было — ни к принтеру, ни к калькулятору. Батарейки были и там, и там. Калькулятор пришёл в другом исполнении, с более качественным чехлом, «горизонтальным» Quick Start Guide и в чёрной упаковке.

Соединение с принтером очень слабое и ненадёжное. Сам принтер выполнил self-test нормально, но по ИК долгое время не удавалось добиться надёжной связи. Необходимость держать оба устройство выровненными раздражает, т.к. скорость обмена информацией весьма далека от желаемой. На мой взгляд, кабель или радиоволны лучше.

Чтобы печатать с HP 50g, надо приставить ИК-окошечки калькулятора и принтера вплотную. Потом сбросить флаги 34 ("Print via IR") и 38 ("Add linefeeds"). Дальше можно печатать экран одновременным нажатием ON и стрелки вверх. Или через меню APPS → "2. I/O functions…", пункты "3. Print display" и "4. Print…" .

HP 50g: единицы измерения и константы.

HP 50g позволяет корректно работать с размерностями физических величин. К сожалению, во-первых акцент сделан на преобразования из метрической системы мер в разные варианты британской — проблема, актуальная лишь для западников и потребителей западного. Исторически же важные древнерусские величины и национальные, принятые в соседствующих с Россией странах с древней культурой (Китай, Япония) практически игнорируются.

Во-вторых, обозначения физических величин латиницей не соответствуют отечественным научным традициям и легко приводят к конфузу.

В-третьих, калькулятор не умеет упрощать размерность автоматически. Умножив 1_A на 1_Ω получим не 1 В, а 1_(A*Ω). Попытка применить UBASE ни к чему хорошему не приводит. Перейти в другую размерность можно с помощью CONVERT, но для этого вам надо её знать или придётся гадать.

Надеюсь, что в отечественных калькуляторах эти проблемы будут решены. Пока же публикую перевод физических величин из вида, закодированного в HP 50g, в общепринятый.

2. Length.. (UNITS F2; длина)

m (meter) м (метр) 1_m = 1 м
cm (centimeter) см (сантиметр) 1_cm = 0,01 м
mm (millimeter) мм (миллиметр) 1_mm = 0,001 м
yd (yard) ярд 1_yd = 0,9144 м
ft (feet) фут 1_ft = 0,3048 м
in (inch) дюйм 1_in = 0,0254 м
Mpc (Mega parsec) Мпк (мегапарсек) 1_Mpc = 3,08567818585E22 м
pc (parsec) пк (парсек) 1_pc = 3,08567818585E16 м
lyr (light-year) св.г. (световой год) 1_lyr = 9,46052840488E15 м
au (astronomical unit) а.е. (астрономическая единица) 1_au = 149597900000 м
km (kilometer) км (километр) 1_km = 1000 м
mi (international mile) миля (сухопутная, международная) 1_mi = 1609,344 м
nmi (nautical mile) морская миля 1_nmi = 1852 м
miUS (US statute mile) миля (уставная, статутная) 1_miUS = 1609,34721869 м
chain (chain) чейн (геодезический) 1_chain = 20,1168402337 м
rd (rod) род 1_rd = 5,02921005842 м
fath (fathom) фатом (морская сажень) 1_fath = 1,82880365761 м
ftUS (survey foot) фут (геодезический) 1_ftUS = 0,304800609601 м
mil (mil) мил 1_mil = 0,0000254 м
μ (micron) мкм (микрометр, микрон) 1_μ = 0,000001 м
A° (Angstrom) A° (ангстрем) 1_A° = 0,0000000001 м
fermi (fermi) ферми 1_fermi = 1E-15 м

3. Area.. (UNITS F3; площадь)

m² (square meter) м² (квадратный метр) 1_m² = 1 м²
cm² (square centimeter) см² (квадратный сантиметр) 1_cm² = 0,0001 м²
b (barn) барн 1_b = 1E-28 м²
yd² (square yard) кв. ярд 1_yd² = 0,83612736 м²
ft² (square feet) кв. фут 1_ft² = 0,09290304 м²
in² (square inch) кв. дюйм 1_in² = 0,00064516 м²
km² (square kilometer) км² (квадратный километр) 1_km² = 1000000 м²
ha (hectare) га (гектар) 1_ha = 10000 м²
a (are) ар 1_a = 100 м²
mi² (square mile) кв. миля (сухопутная, международная) 1_mi² = 2589988,11034 м²
miUS² (square statute mile) кв. миля (уставная, статутная) 1_miUS² = 2589998,47032 м²
acre (acre) акр 1_acre = 4046,87260987 м²

4. Volume.. (UNITS F4; объём)

m³ (cubic meter) м³ (кубометр) 1_m³ = 1 м³
st (stere) 1_st = 1 м³
cm³ (cubic centimeter) см³ (кубический сантиметр) 1_cm³ = 0,000001 м³
yd³ (cubic yard) 1_yd³ = 0,764554857984 м³
ft³ (cubic feet) 1_ft³ = 0,028316846592 м³
in³ (cubic inch) 1_in³ = 0,000016387064 м³
l (liter) л (литр) 1_l = 0,001 м³
galUK (UK gallon) 1_galUK = 0,004546092 м³
galC (Canadian gallon) 1_galC = 0,00454609 м³
gal (US gallon) 1_gal = 0,003785411784 м³
qt (quart) 1_qt = 0,000946352946 м³
pt (pint) 1_pt = 0,000473176473 м³
ml (mililiter) мл (миллилитр) 1_ml = 0,000001 м³
cu (US cup) 1_cu = 2,365882365E-4 м³
ozfl (US fluid ounce) 1_ozfl = 2,95735295625E-5 м³
ozUK (UK fluid ounce) 1_ozUK = 0,000028413075 м³
tbsp (tablespoon) 1_tbsp = 1,47867647813E-5 м³
tsp (teaspoon) 1_tsp = 4,92892159375E-6 м³
bbl (barrel) 1_bbl = 0,158987294928 м³
bu (bushel) 1_bu = 0,03523907 м³
pk (peck) 1_pk = 0,0088097675 м³
fbm (board foot) 1_fbm = 0,002359737216 м³

5. Time.. (UNITS F5; время)

yr (year) г. (год) 1_yr = 31556925,9747 с
d (day) день 1_d = 86400 с
h (hour) ч. (час) 1_h = 3600 с
min (minute) минута 1_min = 60 с
s (second) с (секунда) 1_s = 1 с
Hz (hertz) Гц (Герц) 1_Hz = 1 с⁻¹

6. Speed.. (UNITS F6; скорость)

m/s (meter per second) м/с (метр в секунду) 1_m/s = 1 м/с
cm/s (centimeter per second) см/с (сантиметр в секунду) 1_cm/s = 0,01 м/с
ft/s (feet per second) 1_ft/s = 0,3048 м/с
kph (kilometer per hour) км/ч (километр в час) 1_kph = 0,2(7) м/с
mph (mile per hour) 1_mph = 0,44704 м/с
knot (nautical miles per hour) 1_knot = 0,51(4) м/с
c (speed of light) 1_c = 299792458 м/с
ga (acceleration of gravity) 1_ga = 9,80665 м/с²

7. Mass.. (UNITS NXT F1; масса)

kg (kilogram) кг (килограмм) 1_kg = 1 кг
g (gram) г (грамм) 1_g = 0,001 кг
lb (avoirdupois pound) 1_lb = 0,45359237 кг
oz (ounce) 1_oz = 0,028349523125 кг
slug (slug) 1_slug = 14,5939029372 кг
lbt (Troy pound) 1_lbt = 0,3732417216 кг
ton (short ton) 1_ton = 907,18474 кг
tonUK (long ton) 1_tonUK = 1016,0469088 кг
t (metric ton) 1_t = 1000 кг
ozt (Troy ounce) 1_ozt = 0,0311034768 кг
ct (carat) 1_ct = 0,0002 кг
grain (grain) 1_grain = 0,00006479891 кг
u (unified atomic mass) 1_u = 1,6605402E-27 кг
mol (mole) моль 1_mol = 1 моль

8. Force.. (UNITS NXT F2; сила)

N (newton) Н (Ньютон) 1_N = 1 Н = 1 кг*м/с²
dyn (dyne) 1_dyn = 0,00001 Н
gf (gram-force) 1_gf = 0,00980665 Н
kip (kilopound-force) 1_kip = 4448,22161526 Н
lbf (pound-force) 1_lbf = 4,44822161526 Н
pdl (poundal) 1_pdl = 0,138254954376 Н

9. Energy.. (UNITS NXT F3; энергия)

J (joule) Дж (Джоуль) 1_J = 1 Дж = 1 кг*(м/с)²
erg (erg) эрг 1_erg = 0,0000001 Дж
kcal (kilocalorie) 1_kcal = 4186,8 Дж
cal (calorie) 1_cal = 4,1868 Дж
Btu (International table btu) 1_Btu = 1055,05585262 Дж
ftxlbf (foot-pound) 1_(ft*lbf) = 1,35581794833 Дж
therm (EEC therm) 1_therm = 105506000 Дж
MeV (mega electron-volt) 1_MeV = 1,60217733E-13 Дж
eV (electron-volt) 1_eV = 1,60217733E-19 Дж

10. Power.. (UNITS NXT F4; мощность)

W (watt) Вт (Ватт) 1_W = 1 Вт = 1 кг*м²/с³
hp (horse power) 1_hp = 745,699871582 Вт

11. Pressure.. (UNITS NXT F5; давление)

Pa (pascal) Па (Паскаль) 1_Pa = 1 Па = 1 кг/(м*с²)
atm (atmosphere) атм. (атмосфера) 1_atm = 101325 Па
bar (bar) 1_bar = 100000 Па
psi (pounds per square inch) 1_psi = 6894,75729317 Па
torr (torr) 1_torr = 133,322368421 Па
mmHg (millimeters of mercury) 1_mmHg = 133,322368421 Па
inHg (inches of mercury) 1_inHg = 3386,38815789 Па
inH2O (inches of water) 1_inH2O = 248,84 Па

12. Temperature.. (UNITS NXT F6; температура)

°C (degree Celsius) °C (градус по Цельсию) 0_°C = 273,15 K
100_°C = 373,15 K
°F (degree Fahrenheit) °F (градус по Фаренгейту) 0_°F = 255,37(2) K
90_°F = 305,37(2) K
K (Kelvin) К (Кельвин) 0_K = 0 K
°R (degree Rankine) 0_°R = 0 K
90_°R = 50 K

13. Electric Current.. (UNITS NXT NXT F1; измерение электричества)

V (volt) В (вольт) 1_V = 1 В
A (ampere) А (ампер) 1_A = 1 А
C (coulomb) Кл (кулон) 1_C = 1 Кл = 1 А*с
Ω (ohm) ом 1_Ω = 1 Ом
F (farad) фарада 1_F = 1 Ф
W (watt) Вт (ватт) 1_W = 1 Вт
Fdy (faraday) Фарадей 1_Fdy = 1 Фарадей = 96487 Кл
H (henry) генри 1_H = 1 Гн
mho (mho) мо 1_mho = 1 мо = 1 Ом⁻¹
S (siemens) См (сименс) 1_S = 1 См = 1 Ом⁻¹
T (tesla) тесла 1_T = 1 Тл
Wb (weber) вебер 1_Wb = 1 Вб

14. Angle.. (UNITS NXT NXT F2; измерение плоских и телесных углов)

° (sexagesimal degree) 1_° = 1,74532925199E-2 радиан
r (radian) радиан 1_r = 1 радиан
grad (grade) 1_grad = 1,57079632679E-2 радиан
arcmin (minute of arc) 1_arcmin = 2,90888208666E-4 радиан
arcs (second of arc) 1_arcs = 4,8481368111E-6 радиан
sr (steradian) 1_sr = 1 стерадиан

15. Light.. (UNITS NXT NXT F3; измерение освещённости)

fc (footcandle) 1_fc = 10,7639104167 лк
flam (footlambert) 1_flam = 3,42625909964 кд/м²
lx (lux) лк (люкс) 1_lx = 1 лк = 1 кд*стерадиан/м²
ph (phot) 1_ph = 10000 лк
sb (stilb) 1_sb = 10000 кд/м²
lm (lumen) лм (люмен) 1_lm = 1 лм = 1 лк*м² = 1 кд*стерадиан
cd (candela) кд (кандела) 1_cd = 1 кд
lam (lambert) 1_lam = 3183,09886184 кд/м²

16. Radiation.. (UNITS NXT NXT F4; излучение)

Gy (gray) 1_Gy = 1 м²/с²
rad (rad) 1_rad = 0,01 м²/с²
rem (rem) 1_rem = 0,01 м²/с²
Sv (sievert) 1_Sv = 1 м²/с²
Bq (becquerel) 1_Bq = 1 с⁻¹
Ci (curie) 1_Ci = 37000000000 с⁻¹
R (roentgen) 1_R = 0,000258 А*с/кг

17. Viscosity.. (UNITS NXT NXT F5; вязкость)

P (poise) 1_P = 1 кг/(м*с)
St (stokes) 1_St = 0,0001 м²/с

117.02 MENU (другие)

gmol (gram-mole) 1_gmol = 1 моль
lbmol (pound-mole) 1_lbmol = 453,59237 моль
rpm (revolutions per minute) об/мин (обороты в минуту) 1_rpm = 1,(6)E-2 с⁻¹
dB (decibels) 1_dB = 1

Constants Library

NA Avogadro's number 6.0221367E23_1/gmol
k Boltzmann 1.380658E-23_J/K
Vm molar volume 22.4141_l/gmol
R universal gas 8.31451_J/(gmol*K)
StdT std temperature 273.15_K
StdP std pressure 101.325_kPa
σ Stefan-Boltzmann 5.67051E-8_W/(m²*K^4)
c speed of light 299792458._m/s
ε0 permittivity 8.85418781761E-12_F/m
μ0 permeability 1.25663706144E-6_H/m
g accel of gravity 9.80665_m/s²
G gravitation 6,67259E-11_m³/(s²*kg)
h Planck's 6.6260755E-34_J*s
hbar Dirac's 1.05457266E-34_J*s
q electronic charge 1.60217733E-19_C
me electron mass 9.1093897E-31_kg
qme q/me ratio 175881962000._C/kg
mp proton mass 1.6726231E-27_kg
mpme mp/me ratio 1836.152701
α fine structure .00729735308
φ mag flux quantum 2.06783461E-15_Wb
F Faraday 96485.309_C/gmol
R∞ Rydberg 10973731.534_1/m
a0 Bohr radius .0529177249_nm
μB Bohr magneton 9.2740154E-24_J/T
μN nuclear magneton 5.0507866E-27_J/T
λ0 photon wavelength 1239.8425_nm
f0 photon frequency 2.4179883E14_Hz
λc Compton wavelen .00242631058_nm
rad 1 radian 1_r
twoπ 2π radians 6.28318530718_r
angl ∠ in trig mode 180_°
c3 Wien's .002897756_m*K
kq k/q .00008617386_J/(K*C)
ε0q ε0/q 55263469.6_F/(m*C)
qε0 q*ε0 1.4185979E-30_F*C/m
εsi dielectric const 11.9
εox SiO2 dielec cons 3.9
I0 ref intensity .000000000001_W/m²

При составлении таблиц использовался калькулятор HP 50g с прошивкой 2.09, руководство пользователя HP 50g (UG Edition 1) и словарь Мюллера 1998 года издания (тот, где правильно написано русское слово хэкер). Постинг находится в процессе написания.

Также см. странички Table of HP48/49 Units и Table of HP48/HP49 Constants наших зарубежных коллег.

HP 50g: трюки, хитрости и недокументированные особенности.

Вместо введения

Статья замышлялась, как единое место для сбора недокументированных особенностей HP 50g, установленных зарубежным сообществом любителей калькуляторов и опубликованных на HP Forum, comp.sys.hp48 или англоязычных сайтах. По мере её существования на замечательном сайте Сергея Тарасова она обновлялась русскоязычными советами любителей HP 50g.

Для того, кто читает первоисточники регулярно, здесь много знакомого. Более того, часть подобных особенностей линейки HP 48/49 постепенно документировалась фирмой HP. То есть традиционно «недокументированная» особенность HP 48 вполне может быть описана в UG по HP 49, процедура написания которого отличалась от использованной для предыдущих руководств. Очевидно также, что Эрик Рехлин, готовя свой неофициальный AUR по HP 50g, должен был включить в руководство всё вышеописанное — или, по меньшей мере, постараться это сделать.

Довольно быстро выяснилось, что разделение по признаку документированности оказалось не только расплывчатым, но также произвольным и непрактичным. Например, описание недокументированной или плохо документированной комбинации клавиш выглядело искусственным и неполным без описания схожих, но хорошо документированных комбинаций. Поэтому в статью было включено довольно большое количество просто полезных трюков (включая описанных в руководстве, хорошо или плохо другой вопрос), описание которых оказалось полезным держать в одном месте, под рукой. Это отразилось в окончательном названии статьи.

Данная статья содержит способы использования калькуляторов, не рекомендованные изготовителем. Автор статьи не несёт ответственность за ущерб, нанесённый благодаря следованию приведённым советам или их игнорированию. Статья публикуется в ознакомительных целях и вся ответственность за применение или неприменение изложенных знаний лежит на вас, уважаемый читатель.

Изысканные сочетания клавиш

Пр это правый Shift (оранжевый, ранее красный или зелёный), Лв это левый Shift (белый, ранее синий или purple), а BS это Backspace. Запятая означает последовательное нажатие клавиш, а знак сложения означает одновременное удержание двух или более клавиш. Пробел означает оба эти варианта. Через дробную черту указаны альтернативные клавиши, на выбор.

Во всех режимах:

  • ON+F3 осуществляет «мягкую» перезагрузку (иностранцы пишут ON+C); если во время загрузки удерживать BS, то библиотеки не будут подключены; если во время загрузки удерживать F2, F3 и F4 (B, C и D), то подключается скрытая библиотека Development lib;

  • ON+F1+F6 осуществляет полную перезагрузку с очисткой памяти, флэш-память сохраняется (иностранцы пишут ON+A+F);
  • ON+F4 запуск встроенных тестов (иностранцы пишут ON+D), выход по ON+F3;
  • ON+Up послать снимок экрана на принтер через ИК-порт или на компьютер через USB-кабель;
  • Лв Up/Down/Right/Left передвинуть курсор на страницу вверх/вниз или ширину экрана влево/вправо (при редактировании);
  • Лв Down редактор командной строки (в режиме ожидания);
  • Лв+VAR переход в {HOME};
  • Лв+TOOL переключить режим REAL/COMPLEX;
  • Пр+ENTER переключение режима Approx/Exact;
  • Пр Up/Down/Right/Left передвинуть курсор до конца в указанном направлении (при редактировании);
  • Пр, Down вывод на экран списка переменных с их значениями (если активно меню VAR) или обозначений программных клавиш (в режиме ожидания);
  • Пр, Right запуск XSERV(), сервера XModem'а (предпочтительный способ связи с компьютером; в режиме ALG потребуется нажать ENTER);
  • Пр+Right запуск SERVER(), сервера Kermit'а (устаревший способ связи с компьютером; в режиме ALG потребуется нажать ENTER);
  • Пр F1…F6 кладут на стек объект из данного пункта меню (или записывают в строку его имя; если это меню VAR и переменная содержит программу, используется её текст);
  • Пр+9 переходит в меню TIME Tools.., а просто Пр 9 позволяет задать текущую дату и время, устанавливать будильники
  • ALPHA, Пр/Лв 7/8/9 расставляют акценты и умляуты над последней введённой гласной (например ALPHA Лв 9 расставит точки над Ё);
  • Up делает операцию HIST (путешествие по стеку);
  • Left показывает последний графический вывод (обычно график), выход по F6;
  • Down редактирует объект на вершине стека наиболее подходящим редактором (команда EDITB = Edit Best или EDIT из HP 48);
  • BS делает операцию DROP (удаляет число из стека);
  • ENTER делает операцию DUP (вводит число на вершине стека).

В режиме RPN дополнительно:

  • Right делает операцию SWAP (меняет местами два верхних числа);

  • F1…F6 при активном меню VAR кладут на стек значение соответствующей переменной (если она содержит программу, то программа выполняется);
  • Лв, F1…F6 записывают вершину стека в данный пункт меню (если меню VAR, то в указанную переменную).

Ввод нестандартных символов

Некоторые специальные символы не обозначены на клавиатуре HP 50g. Их вводят следующим образом (см. также Table of HP48/HP49 Characters):

  • Пр+O вводит обратный апостроф, причём дважды (``). Без Shift'ов эта же клавиша вводит пару прямых апострофов (''), а если вам нужен только один, нажимайте ALPHA, Пр, O

  • ALPHA умножить вводит звёздочку (*)
  • ALPHA, Пр+умножить вводит одну двойную кавычку ("), без клавиши ALPHA их будет две
  • ALPHA, Пр делить вводит дробную черту (slash /), её же часто можно получить, просто нажав на клавишу деления
  • ALPHA, Пр C вводит значок дельта (∆)
  • ALPHA, Пр Q вводит символ каретки (^)
  • ALPHA, Пр 0 вводит стрелку вправо (→), без клавиши ALPHA стрелочка будет окружена пробелами
  • ALPHA, Лв 1 вводит знак процента (%)
  • ALPHA, Пр 1 вводит значок тильды, приблизительного равенства (~)
  • ALPHA, Лв 2 вводит точку с запятой (;), но её проще получить, нажав Пр+SPC.
  • ALPHA, Пр, 2 вводит восклицательный знак, факториал (!)
  • ALPHA, Пр 2/3 вводят !/? или ¡/¿ в зависимости от того, отпускается ли Пр до нажатия на цифру
  • ALPHA, Лв/Пр 4 вводит знак доллара ($) или евро (€). Очевидно, здесь разработчиков вдохновила QWERTY-клавиатура, как и в случае с Лв 3 (#).
  • ALPHA, Лв 5 вводит знак фунта, английской валюты (₤)
  • ALPHA, Пр 5 вводит обратную дробную черту (backslash \)
  • ALPHA, Лв 6 вводит знак параграфа (§)
  • ALPHA, Пр+6 вводит символ градуса (например 90°)
  • ALPHA, Пр, 6 вводит символ угла (∠)
  • ALPHA, Пр ENTER вводит «коммерческое at» (@)
  • ALPHA, Лв ENTER вводит амперсанд (&)

Американский калькулятор не поддерживает русский алфавит, зато имеет небольшой ассортимент греческих букв, помимо указанных на клавиатуре π и Σ (маленькая пи и заглавная сигма). Обычно они вводятся в режиме ALPHA с помощью правого Shift'а и кнопки с более-менее похожей латинской буквой:

  • ALPHA, Пр A вводит маленькую греческую букву альфа (α)

  • ALPHA, Пр B вводит маленькую греческую букву альфа (β)
  • ALPHA, Пр D вводит маленькую греческую букву дельта (δ)
  • ALPHA, Пр E вводит маленькую греческую букву эпсилон (ε)
  • ALPHA, Пр T вводит маленькую греческую букву тета (θ)
  • ALPHA, Пр N вводит маленькую греческую букву лямбда (λ)
  • ALPHA, Пр M вводит маленькую греческую букву мю (μ)
  • ALPHA, Пр P вводит заглавную греческую букву пи (Π)
  • ALPHA, Пр F вводит маленькую греческую букву ро (ρ)
  • ALPHA, Пр S вводит маленькую греческую букву сигма (σ)
  • ALPHA, Пр U вводит маленькую греческую букву тау (τ)
  • ALPHA, Пр V вводит маленькую греческую букву омега (ω)
  • ALPHA, Пр+O вводит заглавную греческую букву омега (Ω)

Также любой имеющийся символ можно ввести, выбрав его из таблицы символов с помощью Пр, CHARS. Внизу таблицы будет указано, как ввести выбранный символ с клавиатуры HP 50g. Так можно ввести, скажем, греческие буквы γ (гамма) и η (эта), недоступные с клавиатуры.

Скрытые "яйца"

Команда MINEHUNT запускает игру «Сапёр». Игру можно остановить, нажав клавишу STO. Это сохранит игру в текущем каталоге, в переменной MHPar . Мин обычно 20, но их количество (от 1 до 64) можно указать, создав переменную Nmines . Если число будет отрицательным, мины будут видны.

Если в режиме редактирования EQW набрать MINEISBETTER, выделить стрелкой вверх и нажать программную клавишу F6 (SIMP), запустится тетрис. Управлять клавишами 2, 4, 5 и 6. Во время игры нельзя выключить калькулятор, тетрис останавливается при проигрыше игрока. Также игру можно остановить клавишей BS, не дожидаясь проигрыша (отобразится число убранных линий).

Если этот тетрис показался очень простым и скучным, наберите "HpMad" (с кавычками) в любой форме ввода. Например в поле BEEP меню CALCULATOR MODES.

Команда RULES выводит кроссворд из имён разработчиков и северо-американских национальных героев.

Карточки памяти

HP 50g поддерживает не только SD, но и MMC-карточки. Любые MMC-карточки (microMCC,..) пойдут, если есть соответствующий адаптер.

Фирма обещает, что максимальная ёмкость карточки равна 2Гб. Тем не менее встроенный FILER неспособен отображать правильно количество свободного места на карточке, если оно больше гигабайта. Как только карточка заполнится и свободное место станет меньше гигабайта, оно начнёт отображаться корректно. На практике программы для HP 50g и данные занимают мало места, поэтому карточки с ёмкостью 256-512Мб вполне достаточно.

Сам HP 50g форматирует карточки (которые больше 64Мб), как FAT32. Напомню о существовании в калькуляторе неизменяемого загрузчика, который способен обновлять с карточки содержимое прошивки (из меню ON+F4). Только последние выпуски загрузчика cпособны считывать эти обновления с FAT32. У промежуточных версий загрузчика были проблемы с прочтением FAT12. Фирма гарантирует обновление прошивки на всех выпусках HP 50g лишь при использовании на карточке файловой системы FAT16, то есть при форматировании её на компьютере.

Специальные имена каталога {HOME}

KEYTIME содержит время реакции клавиатуры на нажатую клавишу. Если точнее, то количество «тиков» (от 0 до 4096; в секунде 8192 «тиков»), в течении которых будет игнорироваться повторное нажатие клавиши. Чтобы клавиатура не глотала клавиши при быстром вводе, запишите туда 500…400 или даже 150…300.

STARTUP содержит программу, выполняющуюся при каждой «мягкой» перезагрузке. Запишите сюда всю инициализацию, включая настройку переменной KEYTIME, установку RPN, «мягких» меню, режима клавиатуры USER (-62 SF) и сохраните её копию во флэш-памяти или на SD-карточке.

Переменная STARTOFF содержит программу, выполняемую при автоматическом выключении питания (фактически вместо выключения). Если в ней нет команды OFF, автовыключения не происходит.

Переменная TOFF содержит #xxxx шестнадцатеричное время бездействия в тиках (вплоть до #FFFFFFFFh), через которое калькулятор выключается автоматически. Его нельзя сделать меньше 5 секунд, а при отсутствии этой переменной HP 50g автовыключается через 5 минут. Например, записав #5A000h в TOFF мы получим 45-секундное автоматическое выключение.

Переменные STARTED и EXITED содержат программы, исполняемые при входе и выходе из редактора. Они могут содержать команды, скажем, убирающие и восстанавливающие строчки заголовка для расширения области редактирования.

X — наличие этого имени является главной причиной, почему у новичков не работают дифференцирование и другие функции СКМ. Удалите её и живите спокойно.

Полезные команды и трюки

С помощью команды →LANGUAGE можно заставить систему говорить на одном из трёх встроенных языков. Для этого предварительно занесите в стек его код (0=английский, 1=французский и 2=испанский). Кстати, калькуляторы HP популярны во Франции.

Команда →Q (выбирается из конца меню CAT, то есть Пр SYMB, или набирается через ALPHA, Пр 0) переводит дробь из десятичной в рациональную. Например 0.625 →Q даст 1/16 . Перевести дробь обратно в десятичную можно с помощью команды →NUM (Пр ENTER).

Для появления разделителя тысячей (123456.78 = 123,456.780) сбросьте флаг Approx и установите формат числа Fix (допустим Fix 3). Кстати, режим FIX n влияет на точность вычислений интегралов (гарантировано вычисляются лишь n десятичных знаков после запятой).

WSLOG выдаёт в стек журнал с датами и временем «жёсткой» перезагрузки кнопкой RESET на обратной стороне калькулятора.

TEVAL вычисляет значение на вершине стека аналогично EVAL, выдавая в качестве результата длительность выполнения команды.

Для перевода числа на вершине стека в другую размерность нажмите Лв и программируемую клавишу, соответствующую искомой размерности. (Подразумевается, что 117 флаг Soft MENU установлен.)

{A B FOO SWAP} MENU создаст настраиваемое меню с командами A, B, FOO и SWAP. Вызывать меню можно по команде CUSTOM, то есть Лв+MODE. На калькуляторах семейства HP 48 эта клавиша называлась CST и нажималась без префикса, поэтому некоторые любители перепрограммируют клавиатуру, меняя местами CUSTOM и MODE. Также популярен обмен между клавишами HIST (которая всё равно вызывается стрелкой вверх) и более удобной CMD.

Узнать код клавиши можно, выполнив в режиме RPN команды 0 WAIT и нажав её (можно ввести префикс). Это даст код клавиши, например у клавиши SYMB код 44.1. Код клавиши записывается, как rc.ph (row column . plane, а h равно 1 если префиксная клавиша удерживается и 0 если отпускается). «Нажать» клавишу можно и программно, дав её код на вход команды KEYEVAL.

В режиме USR (для перехода дважды нажать Лв, ALPHA) можно переназначать клавиши. Например последовательность {'Blabla' 44.1} STOKEYS повесит на редкоиспользуемую клавишу SYMB программу с именем Blabla.

Документация и литература

  1. User's manual (Руководство пользователя)
    Невероятно куцая (для HP) брошюрка на 184 странички с небрежной нарезкой из User's Guide, прилагаемая к калькулятору в бумажном виде. Существует перевод на русский язык. Кратко охватывает несколько приёмов работы с HP 50g, содержа несущественные ошибки и ряд забавных опечаток. Нужна лишь тем, кто не умеет вставлять батарейки в калькулятор и читать с экрана по-английски. Остальные могут сэкономить время, скачав User's Guide и пустив глянцевый цитатник на печную растопку.

  2. User's guide (UG)
    Детальное 888-страничное фирменное описание калькулятора HP 50g на английском со снимками экрана и нажимаемыми кнопками, разбитое по темам. Прилагается к калькулятору на компакт-диске, содержит незначительные ошибки и не распространяется в бумажном виде. В pdf'ку входит всё содержимое User's manual, но с большим количеством деталей и дополнений, включая основы программирования на UserRPL. На сайте www.hpcalc.org можно заказать бумажный User's Guide, но он будет несколько устаревший (для HP 48G, то есть практически без СКМ).

  3. Advanced user's reference manual (AUR; Справочное руководство опытного пользователя)
    653-страничный pdf-файл от HP, детально и в алфавитном порядке по-английски описывающий команды HP 49g+/48gII. Также содержит информацию по командам СКМ, программированию на SysRPL и по встроенным (диз)ассемблерам. AUR официально не переиздавался для HP 50g. Но это не страшно, ведь HP 50g фактически и есть HP 49g+, только в строгом корпусе с улучшенной клавиатурой. Наоборот, люди на форумах советуют владельцам HP 49G даже более старую HP-48GX Advanced User's Reference Manual, в силу качества документации, написанной для HP 48G.
    Существует также неофициальное AUR для HP 50g (англ.), подготовленное и выпущенное любителями на основе AUR HP 49. Его можно заказать по почте из Америки, в печатном виде (англ.).

  4. Gilberto E. Urroz Science and Engineering Mathematics with the HP 49G
    Двухтомный учебник по математике, последовательно показывающий, как использовать HP 49G (а, следовательно, и HP 50g) для решения всё более сложных математических задач. Учебник был незаменим во времена HP 48, но его автора наняли для написания UG и AUR по HP 49, поэтому часть двухтомника дублируется в этих руководствах. Оба тома можно заказать на Амазоне.

  5. В. П. Дьяконов Современные зарубежные микрокалькуляторы
    Издание 2002 года содержит в пятой главе «обзорное описание» HP-48 на русском языке, включая азы программирования. В книжных магазинах уже не найти, но её ещё можно заказать через несколько Интернет-магазинов, с доставкой по территории России.

  6. James Donnelly An Introduction to HP 48 System RPL and Assembly Language
    Programming
    , (www)
    Учебник по программированию на SysRPL и ML от одного из разработчиков HP48, называемый в народе «Серая книга». Разумеется, без учёта особенностей HP 49/50g. Язык ассемблера процессора Saturn, описываемый в книге, всё ещё поддерживается в HP 50g, но только в режиме эмуляции.

Талмуды под номером 2 и 3 (UG и AUR) можно скачать с сайта HP. Их лучше иметь в печатном виде, т.к. без овладения ими калькулятор будет больше простаивать, чем отрабатывать свою стоимость. Даже если печатать экономно (на двух сторонах листов A4, по четыре страницы на одной стороне), затраты на получение комплекта документации могут сравняться с ценой МК-152 (приводятся московские цены на январь 2008 года):

  • 200 рублей за пачку бумаги на 500 листов, используется наполовину;

  • 3000 рублей за картридж с тонером, используется меньше половины;
  • по 300 рублей за книгу на переплётные работы.

Учитывайте, что начиная с HP 49/50 кардинально поменялся стиль документации. Теперь вместо детального описания всех возможностей всё более усложняющегося устройства руководство «танцует» от типовых научных и инженерных задач. Иллюстрируя, с помощью нажатия каких кнопок предлагается их решать. Тем владельцам, кто привык к старому исчерпывающему технократическому стилю, рекомендую достать или распечатать руководства от HP 48. Большая часть информации оттуда всё ещё актуальна для HP 50g.

Прошивка и библиотеки

На сайте HP выложена прошивка 2.15, вышедшая 14 сентября 2009. После обновления прошивки может потребоваться установить новые версии библиотек L226 (EqnData.Lib = Equation Data) и L227 (EqnLib.lib = Equation Lib).

Также можно установить L229 — таблицу Менделеева (PerTbl.lib = Periodic Table), которую Jean-Yves Avenard перенёс из HP 48GX в 50g.

Проверить версию прошивки можно командой VERSION. Для «вирусной» передачи прошивки из одного калькулятора в другой служит команда ROMUPLOAD. Команда VER выводит версию CAS.

Команды, новые по сравнению с HP 48

Не-СКМ команды HP 49/50, отсутствующие в HP 48:

{ ANS COLLECT DBUG DEF DISPXY DRAW3DMATRIX DROPN DROP2 DUPDUP DUPN e
EQW EXITED EXPAND FAST3D FILER FLASHEVAL FONT→ →FONT FONT6 FONT7
FONT8 GROBADD HEADER→ →HEADER i ∞ INT I→R KEYTIME LANGUAGE
LOCAL MENUXY MINIFONT →NDISP NDUPN NIP PICK3 PLOT RCLVX REF RENAME R
→I ROMUPLOAD SCALEH SCALEW SCROLL ∑X2 ∑Y2 SREPL STARTED STARTEQW
STARTERR STARTOFF STARTUP STOVX TABLE TBLSET TOFF TPAR TRAN UNBIND
UNPICK UNROT VER WIN ZFACT ZPAR }

Команды СКМ:

{ ? ABCUV ACOS2S ADDTMOD ALGB ARIT ASIN2C ASIN2T ATAN2S AXL AXM AXQ
CASCFG CASCMD CHINREM CMPLX CURL DERIV DERVX DESOLVE DIFF DIV DIV2
DIV2MOD DIVIS DIVMOD DIVPC EGCD EPSX0 EULER EXLR EXP&LN EXPAND
EXPANDMOD EXPLN FACTOR FACTORMOD FACTORS FCOEF FOURIER FROOTS FXND
GAUSS GCD GCDMOD GROBADD HADAMARD HALFTAN HERMITE HESS HILBERT HORNER
IABCUV IBP ICHINREM IDIV2 IEGCD ILAP INTVX INVMOD IQUOT IREMAINDER
ISPRIME? JORDAN KEYEVAL LAGRANGE LAP LAPL LCM LCXM LDEC LEGENDRE LGCD
lim LIN LINSOLVE LNAME LNCOLLECT LVAR MAD MAIN MAP MATR MENUXY MODSTO
MULTMOD NEXTPRIME PA2B2 PARTFRAC PCAR PLOT PLOTADD POWMOD PREVAL
PREVPRIME PROMPTSTO PROPFRAC PTAYL QUOT QXA REF REMAINDER REORDER
RISCH rref RREFMOD SCROLL SERIES SEVAL SIGNTAB SIMP2 SINCOS SOLVE
SOLVER SOLVEVX SUBST SUBTMOD SYLVESTER TABVAL TABVAR TAN2SC TAN2SC2
TAYLOR0 TCHEBYCHEFF TCOLLECT TEVAL TEXPAND TLIN TRAN TRIG TRIGCOS
TRIGO TRIGSIN TRIGTAN TRUNC TSIMP VANDERMONDE VER XNUM ZEROS ∞ }

Питание

HP 50g способен питаться от компьютера (или специального сетевого адаптера) через USB-кабель, что позволяет экономить ресурс батареек. Также потребление существенно снизится, если вставлять в калькулятор SD-карточку лишь в случае необходимости, не пренебрегайте этим советом. Кстати, при каждом нажатии клавиши ON калькулятор обращается к карточке и если ваш корневой каталог захламлён, пауза может стать ощутимой. Пользуйтесь каталогами.

Очень много энергии отнимает форматирование SD-карточки, поэтому эту операцию лучше производить на компьютере (где, к тому же, можно выбрать FAT16) или при питании от USB.

Другим устройством, пожирающим энергию батареек, является ИК-порт. Особенно если он включён на приём.

Обычно калькуляторы HP славятся низким энергопотреблением. HP 50g требует сразу четыре батарейки и при умеренном использовании может проработать от одного «алкалайнового» комплекта дольше полугода и более полутора лет — от литиевого. В случае появления сигнала о слабых батарейках немедленно замените «пальчики» на новые, иначе подсадите «таблетку», рассчитанную на долгую пятилетнюю службу.

Основные и полезные сайты

Вышеописанное написалось после (или во время) изучения следующих рекомендуемых сайтов, большей частью англоязычных. Материал проверялся по мере возможности и необходимости на HP 50g с прошивкой 2.09 . Многое должно работать и на других калькуляторах семейства HP 49.

Ошибка HP 50g в вычислении аргумента комплексного числа

Обнаружил расхождения в результатах вычисления HP 50g аргумента комплексного числа. Например, для числа z=-1-i=(-1,-1), заданного двумя разными способами, в одном случае получается ARG(-1-i)=5*PI/4, а в другом - ARG((-1,-1))=-3*PI/4.

Если посмотреть информацию об ARG в AUR к HP 50g, то для этого случая (третий квадрант) там указана формула atan y/x + π sign y for x < 0. После задания ограничений на значения переменных с помощью системной переменной 'REALASSUME': {'X<0' 'Y<0'} 'REALASSUME' STO, и вычисления аргумента комплексного числа z=X+i*Y отображается неверная формула ATAN(Y/X)+(1-X/|X|)*PI/2 или ATAN(Y/X)+PI, т.е. для алгебраической формы комплексного числа с отрицательной действительной и мнимой частью калькулятор находит НЕ ГЛАВНОЕ значение аргумента, что при последовательном программировании или решении задач, в которых требуется нахождение аргумента, может привести к ошибкам.

На других калькуляторах с CAS такой проблемы не обнаружил.

Ошибка в решении линейных систем на HP 50g.

Калькуляторы HP (включая 48GX и 49G) неправильно решают системы линейных уравнений. Точнее, если ответ отсутствует, числовой решатель (NUM.SLV) безо всякого сообщения об ошибке выдаст некое «приближение», которое сочтёт наилучшим. Фирме указывали на этот факт, но она считает подобное поведение своего калькулятора не ошибкой, а особенностью.

Пример (опубликованный Aharon Sarussi 5 мая 2000 года):
6x-3y=15
-2x+y=0

Вводим данные на экранчике SOLVE SYSTEM (четвёртый пункт Solve lin sys.. из меню Пр 7 NUM.SLV):
Матрица A=[[6. -3] [-2. 1.]]
Матрица B=[[15.] [0.]]

Калькулятор предлагает решение [[1.8] [-.9]], другими словами x=1.8, а y=-0.9

Если же решать уравнение вручную, то из второго уравнения получаем, что y=2x. Подставляя в первое получаем, что 0=15. Решений нет, а калькулятор бредит.

Что можно порекомендовать? Перед решением системы проверить, если ли у неё решения. И доверять полученному ответу (да и вообще запрашивать ответ в числах) лишь в том случае, когда точно уверены, что решения есть.

Ошибка факторизации HP 50g.

Приобрёл вражеский программируемый калькулятор. Отзыв напишу потом. А сейчас самое важное или, по крайней мере, интересное.

Обнаружение ошибки

Как известно, в компьютерной безопасности и криптографии важную роль играет «факторизация» целых чисел, то есть их разложение на простые множители. Напомню, что простое число это то, которое делится без остатка лишь на само себя и на единицу (2, 3, 5, 7, 11, 13,…). Каждое число может быть разложено на простые множители лишь единственным образом (скажем, 15=3*5). И найти это разложение намного дольше, чем перемножить взятые с потолка простые числа. Для разложения больших чисел приходится задействовать кластеры, состоящие из большого числа высокопроизводительных компьютеров. Чтож, пощупаем эту важную грань с помощью калькулятора.

Калькулятор HP 50g подкупает тем, что позволяет «из коробки» (функция ISPRIME?) тестировать числа «на простоту», а также с помощью команды FACTOR разлагать числа на простые множители. Инструкция обещает, что специальный «целый» тип данных позволяет калькулятору обрабатывать числа неограниченной длины. В руководстве (как в кратком User's Manual, так и в 888-страничном User's Guide) нет сведений об ограничениях команды FACTOR, и меня заинтересовала эта «серебряная пуля».

Возьмём два целых числа (занимающие 59 и 79 бит):
DVX = 555555555578888573
DVY = 465327987614456579865323

На оба числа ISPRIME? выдаёт 1, что означает, что это простые числа. Перемножим их, получив 138-битное число:
MAGIC = DVX*DVY = 258515548685555605977575788207962363654079

На это число ISPRIME? честно выдаёт 0, что означает, что оно составное. Однако команда FACTOR не разлагает его на сомножители (в данном случае DVX и DVY), будто оно простое! Более того, на основе этого числа можно создавать другие составные числа, например 17*1999*MAGIC, которые при факторизации на HP 50g не будут содержать в разложении простые множители DVX и DVY. Команда FACTOR будет стабильно использовать в разложении число MAGIC наравне с простыми числами, не сообщая пользователю об ошибке и никак не выделяя неразложенное число среди других сомножителей.

Я не искал другие подобные «лжепростые» числа, но уверен, что их достаточно. Для подбора длинных простых чисел удобно использовать команду NEXTPRIME. Работу которой, правда, тоже неплохо было бы проверить.

Любопытно проверить на других калькуляторах фирмы, присутствует ли в них эта «особенность». До того, как недокументированные ограничения команды FACTOR будут исследованы (кстати, используемая прошивка для HP 49G+/50g (v92, Revision #2.09; HP49 CAS VER 4.20060602) является последней и скачена из Интернета — следовательно технически возможно даже дизассемблирование) я рекомендую не полагаться на калькуляторы HP, по крайней мере в вопросах факторизации больших чисел. Чтобы не писали инструкции, серебряной пули нет и сомножители, выдаваемые командой FACTOR следует отдельно перепроверять на простоту — по меньшей мере с помощью команды ISPRIME? того же калькулятора.

Дальнейшее исследование

Похоже, что на команде FACTOR стоит таймаут. Если поиск сомножителей отнимает больше одной-двух минут, калькулятор сдаётся (как в том анекдоте про подбор пароля китайцами) и считает оставшееся число простым. В некоторых случаях удаётся получить дальнейшее разложение, запустив команду FACTOR для последнего сомножителя. Но если его даже в одиночку невозможно разложить за указанное время, он во всех разложениях будет восприниматься, как простое число. Как влияет на это скорость работы процессора (некоторые программы позволяют его разгонять чуть ли не до 200МГц), я не проверял.

Кстати, мне удалось подобрать значительно меньшие числа (по 27 бит каждое), 53-битное произведение которых заставляет сбоить встроенную команду факторизации:
DV1 = 80000023
DV2 = 90000049
MAG = DV1*DV2 = 7200005990001127

Фактически можно использовать произведение двух любых девяти (и более) значных простых чисел. Достаточно подольше потоптать клавиатуру калькулятора и дать команду NEXTPRIME, чтобы сгенерировать «тайный» сомножитель. Понятно, что после переписывания «сатурновской» прошивки под ARM скорость вычислений возрастёт и указанный диапазон на пару порядков увеличится. Непонятно лишь, почему в инструкции не отмечены не только найденные ограничения команды FACTOR, но и сам неверный ответ не сопровождается ни предупредительным сигналом, ни текстовым сообщением об ошибке.

А может, всё-таки не ошибка?

Итак, команда FACTOR работает не так, как ожидалось. Но тут закралось сомнение. Кто сказал, что она выполняет факторизацию так, как мы ожидаем? Быть может, команда FACTOR просто разлагает на множители. А простые они или нет, уже другое дело.

Чтож. Посмотрим на встроенную подсказку по ещё одной команде, FACTORS (снимок экрана слева). Слово "irreductible" как раз и означает неразложимые, простые множители. Справа же видим разложение по этой команде числа 10*MAG (72000059900011270). Как мы видим, простые множители 2 и 5 машинка нашла. Но на числе MAG споткнулась и показала его, как неразложимое. Хотя оно вполне себе разложимо (на DV1 и DV2).

Итого вердикт ясен. Ошибка. Кстати, в Сети приводятся и другие случаи, когда при сложности (или невозможности) получения правильного ответа HP 50g выдаёт не сообщение об ошибке и не предупреждение, а неправильный ответ. Выдаёт молча, ничем не выделяя подобное поведение на фоне правильных ответов. Так что, несмотря на всю невероятную вычислительную мощь HP 50g, с этой машинкой надо быть аккуратнее.

Устройство на базе HP-50g

Вот такое спецустройство на базе HP-50g. Судя по маркировке клавиш, используется для обхода и наблюдения за техническими объектами "в поле". Картинка ниже.

Взято отсюда. Там еще немало фотографий с конференции разработчиков под HP.