?

Log in

No account? Create an account
Previous Entry Share Next Entry
Проброс "6d10" на китайском клоне Casio FX-3950P
intheyear9595
Обзавелся на днях чудом - программируемым калькулятором "inформат KNA01". Калькулятор как выяснилось, является полным (гонконгским) клоном Casio FX-3950P.

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



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

В России цена калькулятора начинается от совершенно сказочных $8. К слову, калькулятор выпускает гонгконгская фирма Catiga Electronics Company Ltd, в девичестве калькулятор назывался "CS-103" (крупное фото на сайте производителя по ссылке). Под этим именем (без ребрендинга) калькулятор продается в Чехии за $11-18. Оригинал, с которого китайцы "слизали" - это хорошо известный Casio FX-3950P по цене от $30 в США. В россии оригинал судя по беглому гуглению не продается, на молотках калькулятор такого класса стоит от $50.

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




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

6Ran#+1:Rnd

разрослась до:

6Ran#+1->B:B->A:Lbl 1:A-1->A:A>1=>Goto 1:B-A

(определяем дробную часть последовательным вычитанием единицы, затем от оригинального значения отнимаем дробную часть)

Вот - моя программа броска нескольких кубиков (отформатировал для наглядности):

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


Объем занятой памяти - 64 байта из доступных 360-ти (каждый оператор и отдельная цифра константы - байт, goto/lbl - по два байта).

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

10 : CLEAR : DEGREE
20 : FOR X=1 TO 100
30 : Y = EXP(LN(ATN(ATN(TAN (45))))
40 : NEXT X
50 : PRINT Y
60 : END


приняла вид

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 ("пятерка")

Тест на бейсике отсюда переписанный под нотацию касио приобрел вид

1000->A:
  Lbl 0:
  10->B:

    Lbl 1:
    B->X:
    X+1->X:
    X-4.567*10-4->X:
    X+70->X:
    X-69->X:
    X*7->X:
    X/11->X:
    B-1->B:
    B>0=>Goto 1:
  Log X->X:
  Sin X->X:
  X^-1->X:
  X^-1->X:
  A-1->A:
  A>0=>Goto 0:
X


Тест из 100 циклов выполнялся 88 секунд. Перфоманс индекс выходит в 34/(88/100)=39. Шустро, быстрее чем HP-32S! (правда, контрольный результат у меня отчего-то не совпал)

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

Счастлив, что завершил наконец-то свой гештальт по написанию программы броска кубиков произвольной гранности на программируемом калькуляторе. На "Электронике МК-54" этого сделать не удалось из-за проблем с генератором случайных чисел. На "информате" проблем с ГСЧ нет.

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

При цене в $8, считаю "inформат KNA01" must have для всех, кто хочет прикоснуться к миру ПМК. Стоимость "оригинального" FX-3650P - примерно $30 (в США) или $50 на "молотках" и прочих барахолках в России.

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

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


Tags: