Проброс "6d10" на китайском клоне Casio FX-3950P

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

Обзавелся на днях чудом - программируемым калькулятором "inформат KNA01". Калькулятор как выяснилось, является полным (гонконгским) клоном Casio FX-3950P.

Чем он меня так привлек?

  • реально программируемый (не просто запись алгебраических выражений со скобками)
  • двустрочный
  • есть 8 регистров
  • 360 байт под программы (один оператор - байт), 240 - под статданные
  • есть операторы условного и безусловного перехода (!), т.е. ветвление
  • есть генератор случайных чисел
  • легок
  • сказочно дешев
  • считает интегралы и производные (численным методом), работает с комплексными числами, со статданными, причем статданные реально хранятся в памяти и их можно выборочно менять после ввода

Калькулятор "inформат KNA01" (слева) и оригинал "Casio FX-3950P" (справа):

inформат KNA01Casio FX-3950P

Документация "информата" - плохо переведенное и частично урезанное руководство пользователя от калькулятора Casio. Программно в "информате" вроде бы, все работает идентично тому, что описано в документации для casio. Одно исключение, которое я нашел - работа функции Rnd (округление). Так как первой программой, которую я хотел написать была - имитация броска нескольких кубиков (дайсов), это меня на пару дней застопорило (я не был уверен, что правильно использую функцию). После сверки с документацией от "оригинала" решено было имитировать эту функцию последовательным вычитанием (определяем дробную часть последовательным вычитанием единицы, затем от оригинального значения отнимаем дробную часть).

  • D - количество кубиков
  • C - количество граней кубика
  • B - бросок кубика (вещественное число)
  • A - дробная часть
  • X - сумма
0->X:
?->D:
?->C:
Lbl 0:
  6Ran#+1->B:
  B->A:
  Lbl 1:
    A-1->A:
    A>1=>GOTO 1:
  B-A+X->X:
  D-1->D:
  D>1=>GOTO 0:
X

Для оценки быстродействия, переписал программу из книги "Астрономические формулы для калькулятора".

X=1:
Lbl 1:
e(ln(tan-1(TAN 45)))->Y:
X+1->X
100>X=>GOTO 1:
Y

Время выполнения - 75 секунд ("троечка") // TI-82 считает 15 секунд

Проверка точности программным методом (возводим 1.0000001 в степень 2^27)

1.0000001->A:
0->D:
Lbl 1:
A*A->A:
D+1->D:
27>D=>GOTO 1:
A

показала 674520,6067 ("троечка"), однако прямое вычисление 1.0000001^(2^27) дало 574530,4707 ("пятерка")

В сравнении с МК-54 калькулятор конечно, во многом проигрывает, однако не забываем, что МК-54 - это хардкорный эзотерический программируемый калькулятор с обратной польской нотацией, программирование и отладка которого производится при помощи таблиц мнемоник его машинного кода (sic!). Мне лично не хватает в "информате" стека и/или прямой адресации. Маловероятно, но возможно, что это удастся как-то обойти, т.к. в "информате" есть память под статданные...

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

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

Комментарии

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

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

Очень полезная и продуктивная стратегия.

См.: http://www.informat.ru/catalog/9199/1389080/ (298 руб.)

P.S. Здесь (http://intheyear9595.livejournal.com/467.html#cutid1) автор "цитируемой" статьи пишет:

ВАЖНО:
если вы цитируете написанное на этой странице, используете материал собранный мной для написания собственной статьи по смежной тематике, прошу указать авторство оригинала (мой ник в жж), снабдить статью ссылкой на источник (постоянным адресом моей статьи, которую вы использовали). Не допускается присвоение авторских прав. Не допускается объемное (более 50%) цитирование статьи на другом ресурсе без моего разрешения. Если вы хотите где-то привести статью целиком, используйте вместо этого ссылку на мою статью, копипастить ее к себе в жж/на хабр не нужно.

Спасибо за информацию, текст приведен в соответствии с опубликованными условиями автора.