温故知新 - fx-4000P / fx-4500P / fx-4800P

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
<目次>


 
2019/07/14
追記修正 2019/12/03
追記修正 2021/09/11
追記修正 2021/09/27


過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。

2. 新しいプログラミング言語の指向 - 可読性の向上

今回取り上げる fx-4000Pシリーズを順に並べると、結構ある。
- fx-4000P
- fx-4100Pfx-4200P
- fx-4500Pfx-4500PA
fx-4800Pfx-4850P 

1985年にシリーズ最初の fx-4000P が発売された。構造制御を行う各種ジャンプコマンドや配列変数が使え、最大550ステップのメモリ容量がある。搭載言語は FX-502P / FX-602P / FX-603P とは大きく異なり、可読性が大きく向上した。同じ年には 世界初グラフ関数電卓 fx-7000G も登場していて、ほぼ同じ仕様の言語と422ステップの容量がある。

fx-4100P と fx-4200P は実機を持っていないがダウンロードしたマニュアルを見る限り、数式記憶機能はあるが、構造制御コマンドが無いので対象外とする。
fx-4100P Manual
fx-4200P Manual

1989年に fx-4500P が発売された。プログラム保存のメモリ容量は 1103ステップとなり、fx-4000P の550ステップからほぼ倍増された。但し、搭載言語仕様は fx-4000P の延長線上にない点に注目したい。例えば、カウントジャンプ機能が無くなって不便になった一方、条件ジャンプ機能は、条件分岐後のマルチ文が使えるように改善された。
プログラム処理速度は 同時期に発売されていた FX-602P よりもかなり遅くなった。 
なお、fx-4500P をマイナーアップデートした fx-4500PA はバッテリー駆動時間が延長されている。マニュアルを見る限り言語仕様は fx-4500P と変わっていない。

1996年2月に後継の fx-4800P が登場。画面は4行表示と広くなり普通の関数電卓としても使いやすい。言語仕様は fx-4500P の延長線上にあり、カウントジャンプコマンドが追加された。プログラム保存容量の表記は、ステップ数からバイト数に変更され、最大4500バイトになった、プログラム処理も fx-4500P より格段に速くなった。

1997年に発売された fx-4850P は、このシリーズの最終モデルになる。但し中文のマニュアルしか見つからず、理解可能な範囲で見る限り、言語仕様は Cls コマンドが追加された以外は fx-4800P と違いが無さそうだ。但しプログラム保存容量は 28Kバイトと 6倍増強された。
2006年に fx-5800P が発売された時に fx-4850P は生産中止となった(発売は継続)。fx-4000P 発売開始からシリーズ全体は21年間続いたことになる。


今回は、fx-4000Pfx-4500Pfx-4800P 3機種の言語仕様をみてゆく。

1990年12月のカタログには、FX-620P (生産中止品として)、FX-603Pfx-4500P の3機種が掲載されている。
2006年9月のカタログでは、fx-5800P 新発売と同時に FX-603P が消えており、fx-4500PA, fx-4800P (生産中止), fx-4850P (生産中止) が掲載されている。
1990年12月発行のカシオ電卓総合カタログ - FX-602PFX-603Pfx-4500P
2006年9月発行のカシオ電卓総合カタログ - fx-4500PA、fx-4800Pfx-4850Pfx-5800P



Casio fx-4000P [2019/07/30 追記]

温故知新の企画で色々と調べる過程で fx-4000P がエポックメイキングな製品だとわかり、ほぼ新品状態の程度の良い中古品が入手できた(eBay)。
fx-4000PN-New_fx-4000P 

1985年に発売された fx-4000P は、1桁ごとにドットマトリックスになった液晶が採用された。当時の関数電卓としては処理速度が速く、FX-502PFX-602P よりも小型の優れた機種だ。但しプログラムは 句切り文字を使って、全て1行に入力する。

搭載言語の主なコマンドは以下の通り。 
fx-4000P Manual

・キー入力: ?→A
・代入:
・無条件ジャンプ:Goto/Lbl
・条件ジャンプ:
・カウントジャンプ: Isz, Dsz
・比較演算:=, ≠, <, >, ≦, ≧
・サブルーチンコール: Prog
・配列変数 A[ ] が使える。

なお、条件ジャンプ () は、[条件式]⇒[文1]:[文2] という書式で、1行に書かないとエラーになる。

この条件分岐は、
If [条件式]
Then
 [文1]
Else
 [文2]
IfEnd

と同じだ。但し、文1 と 文2 は1つの文しか使えず、句切り文字 : を使ってマルチ文を書くことは許されない仕様だ。

これらの仕様は、同時期の 1985年に発売された世界最初のグラフ関数電卓 fx-7000G と(グラフィックス機能を除けば)全く同じである。fx-4000P の言語仕様は 4000P シリーズの他のモデルには引き継がれず、時を経て fx-5800P や現在のグラフ関数電卓に引き継がれている点は興味深い。



Casio fx-4500P

fx-4500P fx-4500P&manual   

fx-4500P が1989年に発売された時 (発売年情報はこちら) は FX-602P も併売されており、FX-602P のプログラム容量 512ステップから、fx-4500P は1103ステップに増え、プログラムエリア(保存できるプログラム数) はメモリ容量内なら無制限になった(FX-602P は20)。

fx-4500P のディスプレイは、上段ドットマトリックス、下段7セグメントの2行表示に進化した。ほぼ同時期、1年後発売の FX-603P も2行表示に進化した。メモリ保護用にコイン電池 CR-1216を1個、本体駆動用にコイン電池 CR-2025を1個使う。仕様上の連続稼働時間は 3000時間で、実際に使うと1年は持たない。マイナーアップデート版の fx-4500PA は CR-2032 を2個使うように変更され、仕様上 5000時間駆動となった。

[2021/09/11 追記]
fx-4500P のアルミの裏カバーを外すとバッテリ交換ができる。本体駆動用の CR-2025 1個が挿入・固定されており、裏側から貼り付けた薄い金属部品とネジで導通をとった金属板とで正負の電極を構成している。その左側には既に電池を装着する貫通穴が開けられており(奥の黒い部分は基板に貼り付けられた絶縁用樹脂フィルム)、もう一組の電極部材と導通用に金属ネジを裏から貼り付けることでコイン電池を増設できるようになっている。CR-2025 の代わりに少し厚みのあるだけの(少し容量が大きい) CR-2032 を2個装着し、負極を接続するアルミ板を留める金属ネジを裏から貼り付け、基板と導通をとれば fx-4500PA を構成できるように最初から設計されている。なぜ最初からコイン電池2個で発売しなかったのかは興味のあるところだ。当時はコイン電池が高価で入手しずらかった事情に配慮したのだろうか?
fx4500P_Back_2

以前、購入後毎日のように使っていた時、そして保管するようになってからも電池の持ちが仕様値よりもかなり短いと感じていた。電池交換をして実際に使わずに1年程度保管すると Battery Low となったり、全く電源が入らないことを何度も経験してた。電源ONにするには [AC] キーを押すのだが、手帳ケースを付けていると 外からケースに力が掛かれば [AC]キーが簡単に押されて電源ONになっていたことに気づいた (保管方法に問題があった)。そして、保管時に手帳型ケース越しに押されないように留意することで、1年以上保管しても Battry Lowにならずに電卓を駆動できるようになった。以前日常的に使っていた時に仕様よりも遙かに電池寿命が短いと思ったのは、カバンの中で電卓が押されて、使わない時にも電源ONになっていたことが原因だった可能性に、最近気がついた。

確かに fx-4500P[AC] キーは、手帳型ケースの外から押されるだけで簡単に押せてしまう。
fx4500P_AC_Key
ただでさえ電池容量が少ないのに、不要なところで電源ONにされやすいのは問題だ。

一方で、fx-5800P は、[AC] キーの両側にリブ (薄い突起) があり、力が加わってもキーが押されにくくなっている。
fx5800P_AC_Key
fx-4800P にも [AC] キーの周りにこのようなリブ構造はない。fx-4800P と fx-5800P は共にプラスチックのハードケースを備えているので、かなり強い力で押さなければ [AC] キーが押されることはないと思うが、カシオは不用意に [AC] が押される問題をどこかで認識したのだろう。fx-5800P になって改良されていることに今更ながら気づいた。

[2021/09/27 追記]
hangyodon1123 様から、[AC] キーにリブがある fx-4500P もあるとのこと。マイナーバージョンアップ品の可能性あり。
new_fx4500P


fx-4500P 搭載のプログラミング言語の特徴
fx-4500P 搭載の言語は、fx-4000P からキー入力コマンドや代入コマンドが変更され、条件ジャンプの仕様も変更されており、fx-4000P のアップデート版というよりも、別系統を目指したと思われる。

・キー入力:{A} (キー入力した数値を変数Aに代入)
・代入:=
・無条件ジャンプ: Goto/Lbl
・条件ジャンプ: ⇒ / ≠⇒
・カウントジャンプ: 無くなった
・比較演算: =, ≠, <, >, ≦, ≧
・サブルーチンコール: Prog
・配列変数 A[ ] が使える。

条件ジャンプの仕様も fx-4000P から変更され、
書式は、

[条件]⇒[文1]:[文2]: ・・・ :[文m]≠⇒[文m+1]:[文m+2]:  ・・・ :[文n]Δ

となり、新たに追加された ≠⇒Δ コードを使って、マルチ文を書けるようになった。

If [条件] 
Then
 [文1]:[文2]:  ・・・  ・:[文m]
Else
 [文m+1]:[文m+2]: ・・・ :[文n]
IfEnd

と同じで、条件ジャンプは fx-4000P よりも実用性が向上した。

fx-4500P のプログラム編集は、上書きモードがデフォルトになっており、PCや最近のプログラム電卓の挿入モードに慣れていると、かなり使いにくい。


実際のプログラム例
さて実際に「加算プログラム」と「数値積分プログラム」を作り、FX-502P, FX-602P そして FX603P と実行速度を比較してみた。

加算プログラム
加算 

FX-502P のプログラム
FX502P_source_adding_up 

FX-602P / FX-603P のプログラム
FX602P_source_adding_up
 
プログラムを実行すると N の入力が求められるので、1000 を入力する。

これと同じ動作を fx-4000P で書くと、句切り文字を使って以下のような1行になる。
fx4000P_source_adding_up2 

同じ動作を fx-4500P で書くと以下になる。
fx4500P_source_adding_up 
何をやっているのか分かりやすい。


数値積分プログラム
関数 

FX-502P のプログラム
FX502P_source_func 

FX-602P / FX-603P のプログラム
FX602P_souce_function 
プログラムを実行するとシンプソン法で必要な分割数の入力を求めるので、1000を入力する。
なお、この数値積分はとね日記 - 世界初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX-602P (1981) で取り上げられているものをそのまま使わせていただく。

これと同じ動作を fx-4000P で書くと以下のように句切り文字を使って1行になる。
fx4000P_souce_func2 

同じ動作を fx-4500P で書くと以下になる。
fx4800P_souce_func 
何をやっているのか、可読性が向上した。

計算速度のを比較結果を示す;
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍

fx-4000P でのベンチマーク結果も加えている。シリーズ最初の機種 fx-4000P が後継の fx-4500P よりもかなり速い。Kyoro's Room Blog の fx-4000P を取り上げた記事 によれば、CPUには ポケコン (後期のPBシリーズ) で使われている HD61747 が使われているそうだ。なるほど速いわけだ。

fx-4500P は、FX502P / FX-602P / FX-603P に対してプログラムの可読性が向上したが、処理速度はかなり遅い。新たな言語の処理に必要なパワーと、搭載CPUの能力のバランスの結果だと言える。



Casio fx-4800P

fx-4800P-S fx-4800P_w_Manual
(fx-4800P の左の画像は色合いが忠実に再現されているので、関数電卓マニアの部屋 - 絶版コレクション fx-4800P から拝借した)

関数や各種設定、そしてプログラムコマンドの呼び出しは、fx-4500P では全てキー入力だったが、fx-4800P では多くをソフトウェアメニューで呼び出すように変更された。1つのキーに複数の役割を与えると、キーの周りに小さな文字でゴチャゴチャと印刷する必要がある(それはそれで格好いいと思ったものです)が、ソフトウェアメニューのおかげでスッキリと見やすくなった。

4500P_keys 4800P_keys 
      fx-4500P のキー           fx-4800P のキー

さて、fx-4800Pfx-5800P は、キー配列やハードウェアデザインがかなり似ている。

4800P_5800P 
      fx-4800P          fx-5800P

また、ソフトウェアメニューも両者は似ており、操作系もかなり共通している。一方、プログラミング言語に着目すると fx-4800P は fx-5800P とは大きく異なる。

fx-4800P 搭載のプログラミング言語の特徴
fx-4800P 搭載の言語は、fx-4500P と殆ど同じだが、一旦 fx-4500P で消えたカウントジャンプが 復活した。fx-4000P とは明らかに別系統の言語になっている

・キー入力:{A} (キー入力した数値を変数Aに代入)
・代入:=
・無条件ジャンプ: Goto/Lbl
・条件ジャンプ: ⇒ / ≠⇒
・カウントジャンプ: Isz, Dsz 復活した
・比較演算: =, ≠, <, >, ≦, ≧
・サブルーチンコール: Prog
・配列変数 A[ ] が使える。

条件ジャンプの仕様は fx-4500P と全く同じだ。

プログラム編集は、fx-4500P と同様に上書きモードがデフォルトになっており、PCや最近のプログラム電卓の挿入モードに慣れていると、かなり使いにくい。

[2019/07/15 追記] fx-4800P の裏技
sentaro様の情報で、fx-4800Pでは使用する変数によって処理速度が異なるとのこと。
以下原文;
"同時期に販売されていたと思われるグラフ電卓のfx-9700GEも同じ仕様です。
 A~Zまでの1文字変数は固定領域で確保されているのが通常なので速度は変わらないはずですが、これらの機種では変数Aが一番早くZが一番遅いというへんてこな仕様です。
通常のBASIC言語では変数は使われた順(=登録された順)に速いという原則がありますが、それとはまた違ったくせのある仕様です。ということで、使用する変数はAから順に使うのが速く動作させるための秘訣です。(^^;"



実際のプログラム例
上で比較した「加算プログラム」と「数値積分プログラム」を fx-4800Pfx-5800P も加えて、実行速度比較を比較する。

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

FX-502P のプログラム
FX502P_source_adding_up 

FX-602P / FX-603P のプログラム;
FX602P_source_adding_up 

fx-4000P のプログラム
fx4000P_source_adding_up2 

fx-4500P のプログラム
fx4500P_source_adding_up 

fx-4800P のプログラム
fx4800P_source_adding_up fx4800P_source_adding_up_Isz 
fx-4800P に追加されたカウントジャンプ Isz を使ったプログラムもテストする。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

FX-502P のプログラム
FX502P_source_func 

FX-602P / FX-603P のプログラム
FX602P_souce_function
 

fx-4000P のプログラム
fx4000P_souce_func2 

fx-4500P のプログラム
fx4800P_souce_func 

fx-4800P のプログラム
fx4800P_souce_func fx4800P_souce_func_Isz 
fx-4800P で追加されたカウントジャンプ Isz を使ったプログラムもテストする。


以上の計算速度のを比較結果を示す;
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800PB=B+126.3 秒4.7 倍114.3 秒11.0 倍
Isz B21.2 秒5.8 倍109.4 秒11.5 倍

記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

シリーズ最初の機種 fx-4000P が後継の fx-4500P よりもかなり速いのは上で述べている。

fx-4500P は、四則演算は FX-502P よりも遅い。しかし、関数演算は 1.6 倍だけ高速化している。

fx-4800P はカウントジャンプが追加されており、Isz コマンドの処理が速いことが分かる。fx-4800Pfx-4500P の言語仕様を引き継いでおり、四則演算が高速化され FX-603P よりもさらに速い。関数演算はさらに大幅に高速化されている。



プログラム電卓の系譜 - fx-4000シリーズ [2019/08/09 追記修正]

このシリーズでは、可読性の向上を目指して、搭載言語を試行錯誤した跡が見てとれる。単に複数の計算式を繰り返し実行する数式記憶機能だけを搭載した fx-4100Pfx-4200P も含まれるが、これらは冒頭で述べたように特に取り上げていない。

fx-4000P
シリーズの中では、他のモデルと異なる言語仕様を採用している。例えば、キー入力には { } でなく ?→ を使い、代入には = ではなく を使う。ほぼ同じ時期に発売された世界初のグラフ関数電卓 fx-7000G は、グラフ機能以外は同一の仕様になっている。fx-5800Pfx-CG50 は、fx-4000P の直系と言える。

fx-4500P
言語仕様からみて、fx-4000P とは異なる新たな系統の言語が搭載されている。fx-4000P にあったカウントジャンプが無くなったのは不便だ。改善例を挙げるなら、fx-4000P では条件分岐においてマルチ文が使えなかったが、fx-4500P では ≠⇒Δ コードを追加することでマルチ文を使えるようになっている。メモリがほぼ倍増したのは良いが、プログラム処理速度が大幅に低下した。新しい言語仕様導入の過渡期のため処理速度まで手が回らなかったと思われる。

fx-4800P / fx-4850P
fx-4500P で無くなった条件ジャンプ (Isz, Dsz) が追加 (復帰) され、さらに処理速度が大幅に向上した。fx-4500P の系統でのプログラミング言語搭載機は、メモリ増強と実行速度の向上により、ようやく実用的に使えるレベルまでプログラム実行速度が速くなった。また、fx-4500P までは関数やコマンドは全て多機能キーで入力する仕様だったのに対して、fx-4800P / fx-4850P ではソフトウェアメニューが導入された。

このソフトウェアメニューやハードウェアのデザインは fx-5800P に色濃く引き継がれた。一方で別系統の fx-4000P のプログラミング言語の仕様が fx-5800P に引き継がれた。それぞれ良い点が引き継がれたと言える。

fx-4000Pシリーズは、数式記憶機能のみのモデルが含まれたり、異なる系統の言語仕様が混在したり、ポケコン用CPUと関数電卓用CPUが混在したりと、シリーズとしての統一性が無く、試行錯誤の跡が見られ、将来のプログラム電卓の進化に貢献したシリーズと言える。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新:番外編 - 電卓評価用の複素数を解いてみた

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
目次

 
2021/08/22
追記 2021/09/01
追記 2021/09/05
図を追加 2021/09/07



番外編 - 電卓評価用の複素数を解いてみた

プログラム電卓温故知新の記事、プログラム電卓やスタンダード関数電卓の評価記事では、計算能力を調べるために以下の計算を利用している。これは5つの複素数の値になるので、紙とペンで実際に計算してみる。

複数の複素数の値になる計算:Value




Value の本来の5つの値

先ず、計算結果を示す。

極座標形式べき乗根形式10桁の数値形式
Pol_1 Exp_1 Exp_1
Pol_2 Exp_2 Appr_2
Pol_3 Exp_3 Appr_3
 複素数値は "±" を用いて1つの式で2つの値を示しているので、合計5つの値になる

2021/08/22 時点で、これまでに販売されたカシオの スタンダード関数電卓、プログラム関数電卓、グラフ関数電卓、CASグラフ関数電卓の全てのモデルは、これらの5つの値を正しく出力しない。


電卓のモデルに応じて出力が異なる;

Casio の各モデル

 虚数に未対応のモデル
  FX-502P, FX-602P, FX-603P, fx-4000P, fx-7000P, 
  CFX-9850G / 9850GA / 9850GB / 9850GC PLUS
  虚数単位 i  の入力方法がない。32(3/5) = 8 となるが、(-32)(3/5) はエラーになる。
  計算不能

 虚数 i の入力可能だが、虚数計算が不完全なモデル
  fx-991W, fx-290, fx-991MS, fx-4800P
  i 2 = -1 となるが、√(-1) はエラーになる。
  ((-32)3)1/5 = -8, ((-32)1/5)3 = -8 となるが、(-32)3/5 はエラーになる。
  実数根のみを出力、複素数根は出力しない

Real / Complex モードの切替ができるが、複素素計算が不完全なモデル
  fx-991ES / 993ES / 995ES, fx-JP500/ 700 / 900, fx-375ESA, fx-115ES,
  fx-991ES 2nd edition, fx-115ES 2nd edition 
  どちらのモードでも、(-32)3/5 = -8 となる。複素数値は出力できない。
  実数根のみを出力、複素数根は出力しない

 Real / a+bi / r∠θ の3つのモード切替ができるが、複素数計算が不完全なモデル (1)
  fx-98600G
  (-32)3/5 は、
  Real モードで -8
  a+bi モードで -2.472135955+7.60845213i
  r∠θ モード (r:半径、θ: 偏角の極座標形式) で 8∠1.884955592 これは、8∠3π/5 の近似値
  実数根と偏角 3π/5 に対応する複素数根のみ1つだけを出力、全ての5個の値は出力できない

a+bi / r∠θ のどちらかを常に選択、但し複素数計算が誤りになるモデル
  fx-5800P
  (-32)3/5 は、
  a+bi モードで -8
  r∠θ モードで 8∠π誤った根を出力
  実数根を複素数根を1つだけ出力するが、複素数根の計算は誤り

Real / a+bi / r∠θ の3つのモード切替ができるが、複素数計算が不完全なモデル (2)
  fx-9860GII / GIII, fx-9750GIII, fx-CG10 / CG20 / CG50
  Real モードで -8
  a+bi モードで -2.472135955+7.60845213i
  r∠θ モードで 8∠3π/5 、[F-D] キーを押すと 8∠1.884955592 に出力が変わる
  実数根と偏角 3π/5 に対応する複素数根のみ1つだけを出力、全ての5個の値は出力できない

Real / Complex - arg / - conjg / - re / im
  - cExpand / - compToPol / - compToTrig / - compToRect のモードがあるが、
  複素数計算が不完全なモデル
  fx-CP400
  Real モードで -8
  Complex-argπ (計算違い、π/5 か 3π/5 が正解)
  Complex-conjg-2(√5-1) - 2i e(1/2)(in(√5+5)+in(2))
  Complex-re で  -2(√5-1)
  Complex-im2√[2(√5+5)]
  Complex-cExpand-2(√5-1) + 2i√[2(√5+5)]
  Complex-compToPol8・e3πi/5
  Complex-compToTrig8・[cos(3π/5) + sin(3π/5)]
  Complex-compToRect8・(-1)3/5
  実数根と偏角 3π/5 に対応する複素数根のみ1つだけを出力、全ての5個の値は出力できない。

HP Prime G2

Non CAS
  -8
CAS
  8・[(-1/4)・(√5-1)] + (i/4)・√(2(√5+5)) 
  偏角 3π/5 の複素数根
hangyodon1123様による情報 (twitter)

Numworks N0110 omega

-2√5 + 2 + 2√2 + 2√2・√(√5+5)i = -2.472136 + 7.608452i
 |z| = |2√2・√(√5+5)i - 2√5+2|
arg(z) = arg (2√2・√(√5+5)i - 2√5+2)
im(z) = im(2√2・√(√5+5)i -2√5+2)
hangyodon1123様による情報 (twitter)

国内外のいずれのモデルでも、現時点では偏角 π/5 に対応する値を出力しない。理由は不明。
複素数計算については、CASモデルを含めて正しい計算を行える電卓は、見当たらない。



さて本題に戻り、実際に紙とペンで計算してみる。

極座標形式の値を計算する

Equ_1
 とおくと、

Equ_3

そこで、以下の方程式を解く。

Equ_2

この5次方程式は、5個の複素数根を持つ (重複を含める)。
実数根 -8 は、5個のうち1つの根になる。

極座標形式の複素数根を半径r、偏角θとして、以下のようにおく。

Equ_4Cond_1

すると、以下が得られる。

Equ_5Cond_2

従って、

Equ_6

result_01

以上から、5つの根が得られる;

Result_2
       Result_3
       Result_4
       Result_5
       Result_6


∴ Result_2
           Result_7
           Result_8


Re_Im_Plot
複素平面での5つの値

 - 5つの赤の  が5つの複素数を示す
 - 偏角は、±π/5、±3π/5、-π
 - 半径は 8














(以上)



べき乗根形式の値を計算する

cos(3π/5) と sin(3π/5) を求め、極座標形式からべき乗根形式を得る

偏角 3π/5 の極座標形式の値は、以下である;

Result_7

ここで、3π/5 = θ  とおくと、

trig_1

Trig_2

ここで、
倍角定理:    sin(2θ) = 2sin θ・cos θ
3倍角定理:sin(3θ) = 3sinθ - 4sin3θ

を上式に代入すると、

trig_3


辺々 sin θで割って整理すると(sin θ0 でない)、cos θ の2次方程式になり、
trig_4

これを解けば cos θ が得られる。

trig_5

trig_6

=====

trig_7

trig_8

trig_9

trig_10


以上から、偏角 3π/5 の極座標形式をべき乗根形式に変換できる;

trig_11



cos(π/5) と sin(π/5) を求め、極座標形式からべき乗根形式を得る

偏角 π/5 の極座標形式の値は、以下である;

Result_8

ここで、π/5 = θ とおくと、

trig_32

Trig_2

ここで、
倍角定理 : sin(2θ) = 2sin θ・cos θ 
3倍角定理: sin(3θ) = 3sin θ - 4sin3θ 

を上式に代入すると、

trig_23

辺々 sin θ で割って整理すると (sin θ0 でない)、cos θ の2次方程式になり、

trig_24

これを解けば cos θ が得られる。

trig_25

trig_26

=====

trig_7


trig_27

trig_28

trig_29


偏角 π/5 の極座標形式は、以下のべき乗根形式に変換できる;

trig_30

(以上)





温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS
温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: 複素数計算、プログラム関数電卓、グラフ関数電卓、スタンダード関数電卓

リンク集 | ブログ内マップ


テーマ : プログラム関数電卓
ジャンル : コンピュータ

プログラム電卓 温故知新 - 目次

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -

 
2021/06/11
更新 2021/07/12

特定のカシオ製プログラム電卓について、過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。


目 次

温故知新 - FX-502P / FX-602P / FX-603P
 1. キーストローク式言語 - 携帯型プログラム電卓の普及

温故知新 - fx-4000P / fx-4500P / fx-4800P
 2. 新しいプログラミング言語の指向 - 可読性の向上

温故知新 - fx-7000G
 3. グラフ機能の追加

温故知新 - CFX-9850G
 4. Casio Basic 登場 - 可読性と機能の向上 (1)

温故知新 - CFX-9850GC PLUS
 5. 新世代 Casio Basic 登場前夜 - 可読性と機能の向上 (2)

温故知新 - fx-9860G
 6. 新世代 Casio Basic の登場 - プログラム機能の大幅な向上

温故知新 - fx-5800P
 7. 新世代 Casio Basic の特殊バージョン - 機能の改善

温故知新 - fx-9860GII
 8. 新世代 Casio Basic の進化 - Casio Basic とハードウェアの改善

温故知新 - fx-CG10 / fx-CG20
 9. 新世代 Casio Basic の高精細カラー液晶対応 - 飛躍的な表現力の向上  

温故知新 - fx-CP400
 10. CAS機能と構造化Basicの搭載 - 新言語の試み

温故知新 - fx-CG50
 11. 新世代Casio Basicの高速化と Pythonモード - バードウェア改善と新言語搭載


温故知新:番外編 - 関数電卓としての使い勝手

温故知新:番外編 - 電卓評価用の積分を解いてみた

温故知新:番外編 - 電卓評価用の複素数を解いてみた








応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ


テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - fx-CG10 / fx-CG20

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える - 
<目次>


 
2021/08/15

過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。


9. 新世代 Casio Basic の高精細カラー液晶対応 - 飛躍的な表現力の向上

 今回は 2012年3月の発売された fx-CG20 を取り上げる。このモデルはカシオのグラフ関数電卓として初めて16bitカラーの高精細液晶を搭載したモデルだ。
2012年3月発行のカシオ電卓総合カタログ

2010年10月に北米で PRIZM fx-CG10 として先行して発売されたモデルのインターナショナル版が fx-CG20 だ。日本国内で発売されるまで、1年半程度のタイムラグがある。

fx-9860GII の前期型 (SH3) と fx-9860GiI 後期型 (SH4A) のそれぞれの発売の間で fx-CG10, fx-CG20 が発売されている;
 - 2009年:fx-9860GII 前期型 (SH3) (国内)
 - 2010年:fx-CG10 (SH4A) (北米)
 - 2012年:fx-CG20 (SH4A) (国内)
 - 2013年:fx-9860GII 後期型 (SH4A) (国内)
fx-CG10 / fx-CG20 発売のタイミングで CPU を SH4A カスタムチップに切り替える事情があったのだろうと推測している (詳しくは不明)。 結果的に Casio Basic や各種機能を提供する OS は fx-CG10 以降のモデルで共通化されており、Casio Basic や各種機能がほぼ完成され、基本的な機能の大きな変化がない現状につながっていると考えられる。事実、2021年時点での最新モデル fx-CG50, fx-9860GIII, fx-9750GIII でも基本仕様に変化がない。

さて、fx-CG10 / fx-CG20 の最大の特徴は、384 × 216 ドットの高精細カラー液晶を搭載した点だ。これにより画面の表現力が大幅に向上し、イメージファイルだけでなく、出力されるフォントもきれいで明瞭になった。カラー液晶にはバックライトも搭載され、手元が多少暗くても使いやすい。イメージから曲線を切り出したり、フィッティングするなどグラフ機能が大幅に増強された。

搭載されているカラー液晶の出力は、フルカラー(24bitカラー:RGBそれぞれ 8bit, 16,777,216色)ではなく16bit カラー(R, B5bitG6bit, 65,536色) であり、この仕様は fx-CG50 にも引き継がれている。このカラー液晶は見る角度によって色合いが大きく変化する。

fx-CG10 / fx-CG20 は、fx-9860G や fx-9860GII と同様にOSのアップデートに対応している。Casio Basic はOSに含まれているので、OSアップデートに伴い Casio Basic もアップデートされる。2012年発売当初の fx-CG20 のOSバージョンは 1.04 であり、その後 2.00、2.02、3.10、3.11、3.12 とアップデートされている。

fx-CG10 / fx-CG20 に搭載されているCPUは、fx-9860GII 後期型と同じ日立 (ルネサス) 製 SH4Aカスタムチップ - SH7305 であり、CPUコアクロックが 58.98 MHzfx-9860GII 後期型 の倍になっている。関数計算は fx-9860GII 後期型 よりも速くなっているが、Casio Basic プログラムでのテキストおよびグラフィックス画面への出力は非常に遅い。


Casio fx-CG20
fx-CG20_Imagefx-CG20 は、国内では 2012年3月に発売開始された。

電卓総合カタログ / 関数電卓カタログ

取扱説明書 ハードウェア (e-Gadgetサイト)
取扱説明書 クイックスタートガイド (e-Gadgetサイト)

取扱説明書 ソフトウェア OS1.04 (e-Gadgetサイト) 
取扱説明書 ソフトウェア OS2.02 (e-Gadgetサイト)
取扱説明書 ソフトウェア OS3.11 (e-Gadgetサイト)
取扱説明書 ソフトウェア OS3.12 (e-Gadgetサイト) 

fx-CG10 / fx-CG20には、ルネサス(日立)製 SH4Aのカスタムチップ SH7305 が搭載されている。

メインメモリは 64KBで、Casio Basicを含めたOSが格納されて、残りの使える領域が 61KBある。アドインプログラムに使えるストレージメモリは  1.6MB ある。アドインプログラム作成用のSDKはカシオ純正品が提供されていない。




ハードウェア
fx-CG20 では、アルカリ電池に加えて、公式にニッケル水素充電池をサポートするようになった。電池寿命は短くなった。384×216ドットのカラー高精細液晶は出力が非常にクリアできれいになり、バックライトにより暗い部屋でも画面が見やすくなった。CPUコアクロックが 58.98 MHz と fx-9860GII の倍になった。重量は fx-9860GII よりもわずかに 5g だけ増え、寸法は背が高くなったが、薄くスリムになった。

 fx-CG20fx-9860GII 後期型fx-9860G
 電池 単四 x 4 (アルカリ/NiH) 単四 x 4 (アルカリ) 単四 x 4 (アルカリ)
 電池寿命 (メーカー測定基準) 140 時間 200 時間 220 時間
 サイズ (cm) 20.6 x 89.5 x 18.85 21.2 x 91.5 x 18.4 24 x 92.5 x 184.5
 重さ (g) 230 225 260
 液晶ディスプレイ解像度
 ・Casio Basic グラフィックス
 ・Casio Basic テキスト
 216 x 384 pixel
187 x 379 dot
・7 x 21 文字
 64 x 128 pixel
・63 x 127 dot
・7 x 21 文字
 64 x 126 pixel
・63 x 127 dot
・7 x 21 文字
 仮数 + 指数 10桁 + 2桁 10桁 + 2桁 10桁 + 2桁
 内部演算桁数 15桁 15桁 15桁
 プログラムメモリ容量 最大 ~62 KB 最大 ~62 KB 最大 63 KB
 メインメモリ (利用可能) ~61 KB ROM ~64 KB ROM ~63 KB ROM
 ストレージメモリ  ~1.6 MB SRAM ~1.5 MB SRAM ~1.5 MB SRAM
 プログラムファイル名 最大 8文字 最大 8文字 最大 8文字
 CPU SH4A (SH7305) SH4A (SH7305) SH3 (SH7705)
  クロック ~59 MHz ~29 MHz ~29 MHz
 - FLL:  14.75 MHz x900 14.74 MHz x900 14.74 MHz
 - PLL:  FLL x 16, 235.93 MHz FLL x 16, 235.93 MHz FLL x 2, 29.49 MHz
 - IFC: CPUコアクロック 1/4 PLL, 58.98 MHz 1/8 PLL, 29.49 MHz 1/1 PLL, 29.49 MHz
 - SFC: SuperHywayバスクロック 1/8 PLL, 29.49 MHz 1/81PLL, 29.49 MHz 1/1 PLL, 29.49 MHz
 - BFC: メモリバスクロック 1/8 PLL, 29.49 MHz 1/8 PLL, 29.49 MHz 1/1PLL, 29.49 MHz
 - PFC: I/Oクロック 1/16 PLL, 14.75 MHz 1/16 PLL, 14.74 MHz 1/16 PPL, 14.74 MHz
sentaro様作成の カシオグラフ関数電卓用チューンアップツールを使用して得られた結果。


デザイン
fx-CG20_with_cover
fx-CG10
が 2010年にグッドデザイン賞を受賞。
これまでに無いデザインで、半透明なカバーと相まって、おしゃれな高級電卓だと感じる。

なお、キーボード側の上半分を覆っている透明プラスチックは、極めてキズに弱く擦り傷が簡単についてしまう。意匠優先の設計だったと思われる。





OSのアップデート
2012年の発売当初のOSバージョンは 1.04、その後 2.00、2.02、3.11、3.12 へのアップデートファイルが提供された。
当初は、カシオ独自フォーマットの画像ファイルが、fx-CG10fx-CG20 では互換性がない仕様であったが、OS3.11 で互換性が得られるようになった。

関数電卓としての性能

分数表示と演算精度
235÷658 を計算すると 0.3571428571 と表示される。ここで、[F↔D]キーを押すと 5/14  と表示される。計算精度は内部15桁だ。

複素指数関数
eπi を計算してみる。計算できれば答えは -1 になる。

fx-CG20
では、正しく -1 と表示される。

e(5/3)πi を計算させると、1/2 - (√3/2)i と表示され、[F↔D]キーを押すと 0.5 - 0.8660254038i  と表示される。


積分計算
時間のかかる積分計算として次の計算の処理時間を調べる。角度単位は Rad でも Deg でも同じ結果になるが、Rad で実行。
Integral_! 
※ この積分の詳細はこちら

モデル名 (OSバージョン)結果出力処理時間
fx-9860G Slim (OS2.00)3.14159265421.5 秒
fx-9860G (OS2.01)3.14159265422.3 秒
fx-9860G Slim (OS1.11)3.14159265423.6 秒
fx-9860G (OS1.03)3.14159265426.2 秒
fx-5800Pπ173 秒
fx-9860GII [SH3] (OS2.00)π22.8 秒
fx-9860GII [SH4] (OS2.04)π24.1 秒
fx-9860GII [SH4] (OS2.09)π23.7 秒
fx-CG20 (OS2.00)π15.7 秒

fx-CG20 では fx-9860GII と同様に最初に π と出力し、[F↔D] キーで 3.141592654 と分数になる。
その処理速度は fx-9860GII の1.5倍程度速い。関数計算が大きく高速化した。

 
搭載言語 (Casio Basic) の概要

fx-CG10 / fx-CG20 では、表現力の高い高精細カラー液晶を搭載したことに伴い、Casio Basic の出力コマンドが追加された。モノクロ液晶の fx-9860Gfx-9860GII の上位互換となっている。

主なコマンド
 - 入力:?→, Getkey
 - 出力:" ", , Locate
 - テキスト画面消去:ClrText
 - 無条件ジャンプ:Goto / Lbl
 - 条件ジャンプ: (fx-4000P、7000G と同じ仕様)
 - カウントジャンプ:Isz, Dsz
 - 条件分岐:If / Then / Else / IfEnd
 - For ループ:For / To / Step / Next
 - Do ループ:Do / LpWhile
 - While ループ:While / WhileEnd
 - 制御コマンド:Break, Return, Stop
 - 比較演算: =,, >, <,,
 - 論理演算: And, Or, Not, Xor
 - 配列:無し
 - リスト:List (配列としても使える)
 - 行列:Mat (配列としても使える)、行列初期化コマンド
Dim
 - 各種関数

 主なグラフィックス コマンド
 - グラフ設定:CoordOn/CoordOff, GridOn/GridOff/GridLine,
        AxesOn/AxesOff/AxesScale, LabelOn/LabelOff
 - 座標系設定:ViewWindow,
        Xmax/Xmin/Xscl/Xfct, XdotYmax/Ymin/Yscl/
Yfct
 - 消去コマンド:ClrGraph, Cls
 - Sketchコマンド:Plot, PlotOn/PlotOff, PlotChg, Line,
          PxlOn, PxlOff, PxlChg
PxlTest(, Text,
          F-Line, Vertical, Horizontal, Circle,  
          SketchNormal, SketchThick, SketchBroken, SketchDot, SketchThin
 - カラーコマンド:Black, Blue, Red, Magenta, Green, Cyan, Yellow, Plot/Line-Color
 - 各種グラフ描画関連コマンド
  高精細カラー液晶搭載に伴って、追加されたコマンドを赤色で示している。


同じグラフを fx-CG20fx-9860GII で出力したものが下記で、高精細カラー液晶の表現力の高さがわかる

グラフィックス画面へのグラフの出力例
SIR_CG_1s SIR_FX_1s
* このグラフの詳細は ”グラフ関数電卓で観る感染症数理モデル" 参照

Casio Basic でグラフィックス画面に出力する場合、全画面を使えない。モノクロ液晶の fx-9860Gfx-9860GII のプログラムとの互換性を最大限確保するために、論理座標系で使う Plot, PlotOn, PlotOff, PlotChg コマンドはモノクロ画面での1ドットが fx-CG20 では 3×3 ピクセルで対応する仕様になっている。

CoordOn に設定しているとき Plot X,Y を実行するとカーソル が現れる。このカーソルを表示するために、画面の上端と左端の2ピクセル分の領域は Casio Basic でのグラフィックス出力領域から除外されている (仕様)。従って、新世代Casio Basic で出力できるグラフィックス画面の領域は、
・横: (127 × 3 -2) = 379 ピクセル
・縦: (63 × 3 -2) = 187 ピクセル

となる。

テキスト画面への出力例
COLORTXT2 CLORTXT
テキストとしての  の表示色をランダムに設定して出力したもの。

ファイル名: COLORTXT.g3m
For 1→Y To 7
For 1→X To 21
RanInt#(1,7)→N

If N=1:Then
Black Locate X,Y,"■"

Else If N=1:Then
Blue Locate X,Y,"■"

Else if N=3:Then
Red Locate X,Y,"■"

Else If N=4:Then
Magenta Locate X,Y,"■"
Else If N=5:Then

Green Locate X,Y,"■"
Else If N=6:Then

Cyan Locate X,Y,"■"
Else If N=7:Then

Yellow Locate X,Y,"■"
IfEnd:IfEnd:IfEnd
IfEnd:IfEnd:IfEnd

IfEnd
Next:Next


fx-CG20 では、グラフィックス画面、テキスト画面両方とも画面上部にステータス領域が追加された。[SHIFT] - [MENU] で設定を確認しなくても現在の設定が常に表示されるので、利便性が大幅に向上した。


プログラムの作成と実行
プログラムの入力 - 互換性大
キーコード取得プログラムを入力した。コマンドを入力するためのキー (キープレス) は、fx-9860Gシリーズ から最新のモノクロ液晶搭載の fx-9860GIIIfx-9750GIII、そして高精細カラー液晶搭載モデル fx-CG10, CG20 そして fx-CG50 でも全く同じだ。そして純正Casio Basic の基本仕様も変更はなく、色設定のコマンドと高精細液晶を活かしたコマンドが追加された上位互換になっている。物理座標系のグラフィックコマンド PxlOn / PxlOff, PxlChg, PxlTest(, Text は高精細液晶に合わせた出力になり、解像度の低いモノクロ液晶搭載の fx-9860Gfx-9860GII と異なる点は注意が必要だ。 

ファイル名:GETKEY.g3m
Locate 1,1,"=== Get Keycode ==="
Locate 1,3,"Keycode ="
Locate 10,5,"Hit Any Key"
Locate 13,7,"[AC]:Quit"
Do
While Getkey
WhileEnd
Do:Getkey→K
LpWhile K=0
Locate 9,3,"=   "
(スペース6個)
Locate 11,3,K
LpWhile 1


CG20_GetKey   
この画面は、[EXE]キーを押して、キーコード31が表示されているところだ。
テキスト表示の範囲は21桁、7行で、fx-9860Gfx-9860GII と同じである。

プログラムリストの改善
fx-9860Gfx-9860GII シリーズでは、プログラムリストで何かアルファベットを1文字入力しても何も起こらない。
fx-CG20 では、プログラムリストで何かアルファベットを1文字入力すると、その文字で始まるファイル名にジャンプするようにない、利便性が向上した。ただし、アルファベットを複数入力したときの絞り込みには対応していない。

"M" を入力すると、Mで始まる最初のファイルにジャンプする例:
CG20_ProgList


プログラムの転送
リンク用ケーブル (下記2種類) で電卓とPC間、あるいは電卓同士を接続し、プログラムを転送できる。

 USBケーブル ⇒ 電卓とPC間のファイル転送
USB(mini) - USB(A) ケーブル (国内版には標準添付) でPCと接続すると、fx-CG20 は外部ドライブとして認識され、エクスプローラ でファイル操作が行える。

▶ 3pin - 3pin ケーブル (SB-62) ⇒ 電卓間のファイル転送
3pin端子のあるグラフ関数電卓同士でプログラム転送ができる。

3pin-3pinケーブル (SB-62)
まだ販売されているが、takumako様により互換ケーブルが有償頒布されている。SB-62 は fx-9860GIIシリーズや fx-CGシリーズの国内正規版には標準添付されていた。

3Pin_Serial_Connection

いずれの接続方法を用いた場合でも、fx-9860GII の Casio Basic プログラムファイルは拡張子 g1m で、これを fx-CG20 に転送すると自動的に拡張子 g3m に変換される。fx-9860GII から fx-CG20 へプログラムファイルを転送すると、ほとんどの場合はそのまま動作する。一方、fx-CG20 から fx-9860GII へプログラムファイルを転送すると fx-9860GII でサポートされていないコマンドは @ に置き換わり、この場合はエラーになるのでエラー部分を修正する必要がある。 


テキストベース・プログラム
モグラ叩きゲーム
このプログラムは、最初 fx-5800P で作成したものを モノクロ液晶の fx-9860Gfx-9860GII の液晶の解像度に合わせて移植し、さらにそれを fx-CG20 / fx-CG50 の高精細カラー液晶に合わせて変更・移植したものだ。
※ ダウンロード:アクションゲーム - "Whack-a-Mole (もぐら叩き)" 

画面解像度に合わせた変更は必要だが、それ以外は修正せずに動作できるように Casio Basic は互換性が高いことがわかる。

ちなみに、使用するプログラムファイルは、WHACKAMO, WAM, INPI の3つで、メインプログラム WHACKAMO を起動して遊ぶ。
CG20_WhackaMole_1 CG20_WhackaMole_2


fx-CG20 でのプログラミング

純正Casio Basic の問題点
プログラミング言語 Casio Basicfx-CG20 で高い完成度に達しており、実行速度以外に相違点が見当たらない。バグもそのまま引き継がれている。

出力文字列に : を含む行を ' でコメントアウトすると Syn ERRORになる
 ※対策:機切り文字 : の直後に ' を付加する
この問題は fx-9860G / fx-9860GIIfx-CG10 / fx-CG20 に残っており、カシオは操作マニュアルを修正して対応している。詳しくは 楽屋裏 - Casio Basic コメントアウト '  のバグ を参照

Do / While / For ループからの脱出に Dsz / Isz を使うと Syn ERROR になる
 ※対策:ループを Lbl / Goto に置き換えるか、ループ脱出に Break を使う
この現象は、fx-5800Pfx-9860G 以降のグラフ関数電卓で共通して確認されている。
⇒ 楽屋裏 - Dsz によるループ脱出 参照
カシオお客様サポートのご担当者とのやりとりの結果、ループの後 (必ずしも直後でなくても良い) に Goto 0:Lbl 0 と記述することでこのエラーを回避できることが分かっている (詳細は上記の記事を参照)。


処理速度の比較

四則演算および関数計算

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

fx-CG20 のプログラム
fx7000G_source_adding_up_Isz2 AddTest_For 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

fx-CG20 のプログラム
FuncTest_Goto_9850 FuncTest_For_985 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍

fx-4800P
A=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒 11.5 倍
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
CFX-9850GGoto20.9 秒5.9 倍98.3 秒12.8  倍
For9.2 秒13.4 倍84.3 秒15.0 倍
CFX-9850GC PLUSGoto22.0 秒5.6 倍100 秒12.6 倍
For9.2 秒13.4 倍85.4 秒14.8 倍
fx-9860G [SH3]
OS 1.02
Goto2.1 秒61.6 倍14.6 秒86.4 倍
For1.3 秒94.7倍13.2 秒95.6 倍
OS 1.03Goto2.1 秒61.6 倍14.4 秒87.6 倍
For1.1 秒111.9 倍13.1 秒96.3 倍
OS 1.04Goto2.5 秒61.6 倍14.3 秒88.2 倍
For1.2 秒102.6 倍13.0 秒97.1 倍
OS 1.05Goto2.3 秒61.6 倍14.3 秒88.2 倍
For1.2 秒102.6 倍13.1 秒96.3 倍
OS 2.01Goto3.6 秒34.2 倍17.0 秒74.2 倍
For2.5 秒49.2 倍15.1 秒83.6 倍
fx-9860GII [SH3]OS2.00Goto4.5 秒27.4 倍18.2 秒69.3 倍
For2.7 秒45.6 倍15.6 秒80.9 倍
fx-9860GII [SH4]OS2.04Goto6.7 秒18.4 倍19.2 秒65.7 倍
For3.8 秒32.4 倍15.4 秒82.0 倍
OS2.09Goto6.8 秒18.1 倍18.8 秒67.1 倍
For3.9 秒31.6 倍15.0 秒84.1 倍
fx-CG20OS2.00Goto5.3 秒23.2 倍13.6 秒92.8 倍
For3.2 秒38.5 倍11.1 秒113.7 倍
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

加算プログラムは、fx-9860GII 後期型よりは速くなっているが、SH3 プロセッサ搭載の fx-9860Gfx-9860GII 前期型 よりは遅い。

数値計算プログラムは関数計算を繰り返す計算で、fx-CG20 は最も速い結果になった。fx-CG20 では関数計算の高速化が図られている。ただし上で調べた "時間のかかる積分" での結果ほどの高速化 (1.5 倍) にはなっていないことから、ループ計算の高速化がそれほど相対的に高速化していないようだ。


グラフィックス描画
▶ ドット描画プログラム
fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて fx-9860GII でも 95 x 63 ドットを塗りつぶして処理速度を比較する。

fx-7000G のプログラム
fx7000G_Dot DOT_fx7000G  

fx-CG20 のプログラム - Plot コマンド (論理座標系)
Dot_Plot  CG20_DOT2



ViewWindowsPlot コマンドなど、論理座標で動作するグラフィックスコマンドは モノクロ液晶の fx-9860Gfx-9860GII と画面表示上の互換性が確保されており、Plot コマンドで On にすると 3×3 ドットが On になる。

fxCG20 のプログラム - PxlOn コマンド (物理座標系)
Dot_Pxl  CG20_DOT

fx-CG20 は、216×384 ドットの高精細液晶を搭載しており、物理座標系で動作する PxlOn コマンドを使って 95×63 ドットを塗りつぶすと画面全体の 1/9 程度の面積になる (1/3 × 1/3 = 1/9)

これら PxlOnPlot で塗りつぶしときの処理速度を調べる。

PxlOnPlot
fx-7000G213 秒---------
CFX-9850G926.5 秒0.23 倍496.0 秒0.43 倍
CFX-9850GC PLUS901.1 秒0.24 倍929.1 秒0.23 倍
fx-9860G [SH3]OS 1.02251.2 秒0.85 倍255.7 秒0.83 倍
OS 1.03251.7 秒0.84 倍256.6 秒0.83 倍
OS 1.04252.8 秒0.84 倍257.5 秒0.83 倍
OS 1.05251.9 秒0.85 倍256.7 秒0.83 倍
OS 2.01295.8 秒0.72 倍301.7 秒0.71 倍
fx-9860GII [SH3]OS2.00300.0 秒0.71 倍306.2 秒0.70 倍
fx-9860GII [SH4]OS2.04288.3 秒0.74 倍291.1 秒0.73 倍
OS2.09301.7 秒0.71 倍303.8 秒0.70 倍
fx-CG20OS2.001419.2 秒0.15 倍1574.4 秒0.14 倍

fx-CG20 は、これまでのどのグラフ関数電卓よりも圧倒的に処理が遅い
上で調べたグラフの出力は高速であり、出力が極めて遅いドット出力との違いは、VRAMから画面への転送方法の違いによる。グラフはVRAMにグラフ全体を書き込んでから画面に転送しているが、ドットは1つづつ転送している。VRAMから画面への転送速度自体が遅いため、ドットを1つづつ転送すると極めて時間がかかる。

fx-CG20 はドットベースのグラフィックス出力を行うプログラムには全く不向きだといえる。


画面更新プログラム
VRAMから画面へのデータ転送が処理速度の最大のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較する。

出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを別に作成したものを評価に利用する。

グラフィックス画面更新プログラムMONTECAR
CG20_MONTECAR
MONTECAR - モンテカルロ法による円周率計算プログラム

プログラムのダウンロード - Montecar.g3m を電卓に転送する
プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べる。


テキスト画面更新プログラムPYTHA
CG20_PYTHA
PYTHA - ピタゴラス数の計算プログラム

プログラムのダウンロード - PYTHA.g3m を電卓に転送する
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。

PYTHAMONTECAR
CFX-9850G294.3 秒165.6 秒
CFX-9850GC PLUS295.2 秒0.99 倍267.7 秒0.62 倍
fx-9860GOS 1.0276.0 秒3.87 倍115.4 秒2.55 倍
OS 1.0389.3 秒3.30 倍115.8 秒2.54 倍
OS 1.0489.4 秒3.29 倍115.8 秒2.54 倍
OS 1.0589.2 秒3.30 倍115.9 秒2.54 倍
OS 2.0195.8 秒3.07 倍128.7 秒2.29 倍
fx-9860GII [SH3]OS2.00100.1 秒2.94 倍131.5 秒2.24 倍
fx-9860GII [SH4]OS2.0487.1 秒3.38 倍135.9 秒2.17 倍
OS2.0983.0 秒3.54 倍135.5 秒2.17 倍
fx-CG20OS2.00179.9 秒1.64 倍430.9 秒0.68  倍

GetkeyLocate を初めて搭載した CFX-9850G を基準に、処理速度の比率も合わせて示した。

テキスト画面への繰り返し出力する PYTHA、そしてグラフィックス画面に繰り返し出力する MONTECAR 双方とも、これまでのどのグラフ関数電卓よりも遅いことが、定量的に明らかになった。特にグラフィックス画面への出力は絶望的に遅い。


プログラム電卓の系譜 

単なる計算やグラフ表示のマクロ言語から脱却し、アプリケーションとしてのプログラムを書けるように進化した 新世代Casio Basic は、fx-9860GII シリーズで完成度の高いレベルになっていた。

2010年に北米で発売された高解像度カラー液晶搭載の fx-CG10 PRIZM は、解像度 240×320、16階調モノクロ液晶を搭載した TI Nspire  (2007年発売) TI Nspaire with Touchpad (2010年発売) に対抗するためだと考えられる。解像度はほぼ同じでカラー液晶で一歩先をいっていた。その後 16bitカラー、解像度 240×320 液晶搭載の TI Nspire CX が対抗モデルとして発売されている。

fx-CG20 の最大の特徴は、解像度 216×384, 16bitカラー液晶にあり、表現力を大幅に向上させた。それに伴い、内蔵言語である新世代Casio Basic に色指定コマンドとグラフィックス描画コマンドが追加された。グラフィックス描画コマンド (Sketchコマンド) は、論理座標系での描画においてはモノクロ液晶と同じ出力になるように互換性が維持されている。その結果1ドットが 3×3 ピクセルとして扱われる。一方、物理座標系で描画するグラフィックスコマンド PxlOn, PxlOff, PxlCng, PxlTest(, Text による出力はモノクロ液晶搭載モデルと互換性が無い。

グラフ関数電卓として fx-CG20fx-9860GII の後継機種とカシオは考えているようだが、内蔵言語の視点でいえばテキスト画面ならびにグラフィックス画面への出力が異常なまでに遅いのは、大きな欠点であり、fx-9860GII の高家モデルとは言いがたい。グラフ描画自体はそれほど遅くないが、内蔵言語で作る実用プログラムで画面更新を頻繁に行う場合は使い物にならない。fx-CG10 / fx-cG20 は、過渡的モデルだといえる。

そして、次のモデル fx-CG50 で画面更新の問題がようやく改善される。




温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手

温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた


応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ


テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - fx-9860GII

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える - 
<目次>


 
2021/08/12
追記修正 2021/08/15

過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。


8. 新世代 Casio Basic の進化 - Casio Basic とハードウェアの改善

今回は、fx-9860GII を取り上げる。このモデルは、fx-9860G の直接の後継機として日本国内で 2009年10月に新発売された。
2009年10月発行のカシオ電卓総合カタログ

初めてOSがアップデートできるようになった 2005年発売 fx-9860G の後継モデルが fx-9860GII であり、OSのアップデートに対応している。Casio Basic はOSに含まれているので、OSアップデートに伴い Casio Basic もアップデートされる。

2009年発売当初の fx-9860GII のOSバージョンは 2.00 であり、その後 2.012.042.09 とアップデートされてきている。ところで、1つ前のモデル fx-9860G のOSバージョンは1.xx であったが、fx-9860GII の発売に合わせて fx-9860G 向けのOS2.0x のアップデーモジュールも提供された。1つ前のモデルにも同じ機能が適用可能になるというのは、製品寿命の長い電卓製品ならではの良いサービスだと思う。

fx-9860GII には前期型と後期型があり、それぞれで使われているCPUが異なる。前期型は fx-9860G と同じルネサス(日立)製SH3カスタムチップが使われており、後期型では SH4Aカスタムチップが採用されている。

前期型、後期型ともに、fx-9860GIIfx-9860GII SD が発売された。SDバージョンにはSDカードスロットがあり、プログラムやデータをSDカードに保存できる。純正 Casio Basic では、残念ながらSDカードにあるプログラムを起動することはできないが、SDカード内のデータは保存用として使え、さらにデータリンクによりPCに転送できる。SDバージョンは、青とシルバーの塗色が使われており高級感があると思う。

SH3が採用されている前期モデルは、fx-9860G(SD)fx-9860GII(SD) ともに、液晶の下に USB POWER GRAPHIC と表記されている。SH4A が採用されている後期型の fx-9860GII と fx-9860GII SD では、液晶の下の表記は末尾に 2 が追加され USB POWER GRAPHIC 2 と変化している。

fx-9860GII_SD_SH39860GII_SD_SH4  
 fx-9860GII SD (SH3)  fx-9860GII SD (SH4)    fx-9860GII (SH4)
  (バックライト点灯)   (バックライト消灯)   (バックライト消灯)

世界で初めて液晶のバックライトが搭載されたのが fx-9860G Slim であったが、元のモデルである fx-9860G や fx-9860G SD にはバックライトは搭載されていなかった。このバックライト機能が fx-9860GIIfx-9860GII SD に標準的に搭載された。fx-9860GII には Slim バージョンが用意されなかったが、有れば絶対に入手していたと思う。Slim バージョンがなかったのはとても残念だ (fx-9860G Slim の勧め)。

2009年に発売された fx-9860GII の Casio Basic を含むソフトウェアとハードウェアの基本機能は、2021年月現在の最新機種 fx-CG50fx-9860GIIIfx-9750GIII にほぼそのまま引き継がれており、Pythonモード以外で大きな違いがない。その完成度の高さを示している。


Casio fx-9860GII

fx-9860G2fx-9860GII が、国内では 2009年10月に発売開始された。

カタログ 

取扱説明書 ハードウェア (e-Gadgetサイト)

取扱説明書 ソフトウェア OS2.00 (e-Gadgetサイト) 
取扱説明書 ソフトウェア OS2.04 (e-Gadgetサイト)
取扱説明書 ソフトウェア OS2.09 (e-Gadgetサイト)

fx-9860GII / fx-9860GII SD の前期型には、ルネサス(日立)製SH3のカスタムチップ SH7705 が搭載され、液晶の下に USB POWER GRAPHIC と表記されている。後期型には、ルネサス(日立)製 SH4Aのカスタムチップ SH7305 が搭載され、液晶の下に USB POWER GRAPHIC 2 と表記されている。

メインメモリは 64KBで、Casio Basicを含めたOSが格納されている。アドインプログラムに使えるストレージメモリは 1.5MB ある。アドインプログラム作成用のSDKは、fx-9860G 用のものがそのまま使える。SDKの入手

fx-9860GII SD は、表のシルバー塗装と濃い青色塗装が施されている。


ハードウェア
fx-9860G に比べて fx-9860GII / fx-9860GII SD の液晶は応答性・視認性が少し悪化しているが、その一方でバックライト機能が追加された。バックライトにより暗い部屋でも画面が見やすくなり画期的だと思う。中高年の目にも優しい。
重量は fx-9860G より13.5%軽くなり、寸法も若干小さくなった。電池寿命は少し短くなった。

 fx-9860GII 後期型fx-9860GII 前期型fx-9860G
 電池 単四 x 4 (アルカリ) 単四 x 4 (アルカリ) 単四 x 4 (アルカリ)
 電池寿命 (メーカー測定基準) 200 時間 200 時間 220 時間
 サイズ (cm) 21.2 x 91.5 x 18.4 21.2 x 91.5 x 18.4 24 x 92.5 x 184.5
 重さ (g) 225 225 260
 液晶ディスプレイ解像度
 ・Casio Basic グラフィック
 ・Casio Basic テキスト
 64 x 128 pixel
・63 x 127 dot
・7 x 21 文字
 64 x 128 pixel
・63 x 127 dot
・7 x 21 文字
 64 x 126 pixel
・63 x 127 dot
・7 x 21 文字
 仮数 + 指数 10桁 + 2桁 10桁 + 2桁 10桁 + 2桁
 内部演算桁数 15桁 15桁 15桁
 プログラムメモリ容量 最大 ~62 KB 最大 ~62 KB 最大 63 KB
 メインメモリ (利用可能) ~64 KB ROM ~64 KB ROM ~63 KB ROM
 ストレージメモリ  ~1.5 MB SRAM ~1.5 MB SRAM ~1.5 MB SRAM
 プログラムファイル名 最大 8文字 最大 8文字 最大 8文字
 CPU SH4A (SH7305) SH3 (SH7705) SH3 (SH7705)
  クロック ~29 MHz ~29 MHz ~29 MHz
 - FLL:  14.75 MHz x900 14.74 MHz 14.74 MHz
 - PLL:  FLL x 16, 235.93 MHz FLL x 2, 29.49 MHz FLL x 2, 29.49 MHz
 - IFC: CPUコアクロック 1/8 PLL, 29.49 MHz 1/1 PLL, 29.49 MHz 1/1 PLL, 29.49 MHz
 - SFC: SuperHywayバスクロック 1/8 PLL, 29.49 MHz 1/1 PLL, 29.49 MHz 1/1 PLL, 29.49 MHz
 - BFC: メモリバスクロック 1/8 PLL, 29.49 MHz 1/1 PLL, 29.49 MHz 1/1 PLL, 29.49 MHz
 - PFC: I/Oクロック 1/16 PLL, 14.75 MHz 1/1 PLL, 14.74 MHz 1/1 PPL, 14.74 MHz
sentaro様作成の カシオグラフ関数電卓用チューンアップツールを使用して得られた結果。


OSのアップデート
2009年の発売当初のOSバージョンは 2.00、その後 2.01、2.04、2.09 へのアップデートファイルが提供された。
これらアップデートは主に欧米での各種試験への電卓持ち込み対策である。


関数電卓としての性能

分数表示と演算精度
235÷658 を計算すると 0.3571428571 と表示される。ここで、[F↔D]キーを押すと 5/14  と表示される。計算精度は内部15桁だ。

複素指数関数
eπi を計算してみる。計算できれば答えは -1 になる。
1つ前の機種 fx-9850GC PLUS では複素指数関数の計算ができず、演算エラー(Ma ERROR) になったが、fx-9860G で初めて複素指数関数の計算に対応した。

一方、e(5/3)πi を計算させると、0.5 - 0.8660254038i と表示され、[F↔D]キーを押すと 1/2 - 0.8660254038i  と表示される (OSバージョンによらない)。なお、次の機種 fx-9860GII 以降は自然数式表示機能が徹底され、これを計算すると 1/2 - √3/2i と表示される。

積分計算
時間のかかる積分計算として次の計算の処理時間を調べる。角度単位は Rad で実行。
Integral_! 
※ この積分の詳細はこちら

モデル名 (OSバージョン)結果出力処理時間
fx-9860G Slim (OS2.00)3.14159265421.5 秒
fx-9860G (OS2.01)3.14159265422.3 秒
fx-9860G Slim (OS1.11)3.14159265423.6 秒
fx-9860G (OS1.03)3.14159265426.2 秒
fx-5800Pπ173 秒
fx-9860GII [SH3] (OS2.00)π22.8 秒
fx-9860GII [SH4] (OS2.04)π24.1 秒
fx-9860GII [SH4] (OS2.09)π23.7 秒

fx-9860Gシリーズは、最初の出力が分数になり、[F↔D] キーを押すと π と表示される。
fx-9860GII では、最初の出力が π となり、[F↔D] キーで 3.141592654 と分数になる。その処理速度は1つ前のモデル fx-9860G よりも遅く、fx-9860GII では CPUが SH3 の前期モデルよりも SH4A の後期モデルが遅い。

 
搭載言語 (Casio Basic) の概要

fx-9860G OS1.0x に対して、fx-9860GII OS2.0x では、文字列処理コマンド、Xor論理演算、Menuコマンド、乱数発生コマンドRanInt#, RanBin# などが追加された。さらに、グラフ描画機能に関連した表計算、統計計算などの大幅な機能追加に対応して大量のCasio Basicコマンドが追加された。

主なコマンド
 - 入力:?→, Getkey
 - 出力:" ", , Locate
 - テキスト画面消去:ClrText
 - 無条件ジャンプ:Goto / Lbl
 - 条件ジャンプ: (fx-4000P、7000G と同じ仕様)
 - カウントジャンプ:Isz, Dsz
 - 条件分岐:If / Then / Else / IfEnd
 - For ループ:For / To / Step / Next
 - Do ループ:Do / LpWhile
 - While ループ:While / WhileEnd
 - 制御コマンド:Break, Return, Stop
 - 比較演算: =,, >, <,,
 - 論理演算: And, Or, Not, Xor
 - 配列:無し
 - リスト:List (配列としても使える)
 - 行列:Mat (配列としても使える)、行列初期化コマンド
Dim
 - 各種関数

 主なグラフィックス コマンド
 - グラフ設定:CoordOn/CoordOff, GridOn/GridOff,
        AxesOn/AxesOff, LabelOn/LabelOff
 - 座標系設定:ViewWindow,
        Xmax/Xmin/Xscl/Xfct, XdotYmax/Ymin/Yscl/
Yfct
 - 消去コマンド:ClrGraph, Cls
 - Sketchコマンド:Plot, PlotOn/PlotOffPlotChg, LINE,
          PxlOn, PxlOff, PxlChg
PxlTest(, Text,
          F-Line, Vertical, Horizontal, Circle 
          SketchNormal, SketchThick, SketchBroken, SketchDot
 - 各種グラフ描画関連コマンド


プログラムの作成と実行
キーコード取得プログラムを入力した。コマンドを入力するためのキー (キープレス) は、1つ前のモデル fx-9860Gシリーズ から最新のモノクロ液晶搭載の fx-9860GIIIfx-9750GIII と全く同じだ。高精細カラー液晶搭載モデル fx-CG10, CG20 そして fx-CG50 でも 純正Casio Basic の基本仕様に変更はなく、カラー関係のコマンドや高精細液晶を活かしたコマンドが追加されているのみだ。

ファイル名:GETKEY
Locate 1,1,"=== Get Keycode ==="
Locate 1,3,"Keycode ="
Locate 10,5,"Hit Any Key"
Locate 13,7,"[AC]:Quit"
Do
While Getkey
WhileEnd
Do:Getkey→K
LpWhile K=0
Locate 9,3,"=   "
(スペース6個)
Locate 11,3,K
LpWhile 1


Keycode_9860GII  
この画面は、[EXE]キーを押して、キーコード31が表示されているところだ。
テキスト表示の範囲は21桁、7行で、fx-9860G から変化はない。


プログラムの転送
リンク用ケーブル (下記2種類) で電卓とPCを接続し、プログラムリンクソフトウェア (FA-124) を使ってリンクできる。

 PCリンク - USBケーブル使用
USB(mini) - USB(A) ケーブルが必要。多くの場合標準添付されている。

3pin-USBケーブル (SB-88) 使用
現在は製造中止品だが、takumako様により互換ケーブルが有償頒布されているので私はこれを利用している。

プログラムリンク ソフトウェア (FA-124)
カシオのサイトから無償ダウンロードできる。上記のいずれかのケーブルとFA-124で、プログラムファイルやデータファイルの転送や電卓の画面画像を取得できる。PCに転送されるプログラムファイルは、g1m ファイル (拡張子が g1m) になる。

▶ 電卓間のプログラム転送
3pin-3pinケーブル (SB-62) を使えば、3pin端子のあるグラフ関数電卓同士でプログラム転送ができる。

3pin-3pinケーブル (SB-62)
まだ販売されているが、takumako様により互換ケーブルが有償頒布されている。SB-62 は fx-9
860GIIシリーズや fx-CGシリーズの国内正規版には標準添付されていた。


テキストベース・プログラム
モグラ叩きゲーム
このプログラムは、最初 fx-5800P で作成したものを fx-9860GII の液晶解像度に合わせて変更・移植したものだ。
※ ダウンロード:アクションゲーム - "Whack-a-Mole (もぐら叩き)" 

使用するプログラムファイルは、WHACKAMO, WAM, INPI の3つで、メインプログラム WHACKAMO を起動して遊ぶ。
1つ前のモデル fx-9860G シリーズでは  OS2.0x 以上なら完全互換で動作する。

Whack-a-Mole_1_9860GII Whack-a-Mole_2_9860GII 


fx-9860GII でのプログラミング

純正Casio Basic の問題点
プログラミング言語 Casio Basicfx-9860G でほぼ完成しており、実行速度以外に相違点が見当たらない。バグもそのまま引き継がれている。

出力文字列に : を含む行を ' でコメントアウトすると Syn ERRORになる
 ※対策:機切り文字 : の直後に ' を付加する
この問題は fx-9860G にあり、fx-9860GIIfx-CGシリーズにも残っており、カシオは操作マニュアルを修正して対応している。詳しくは 楽屋裏 - Casio Basic コメントアウト '  のバグ を参照

Do / While / For ループからの脱出に Dsz / Isz を使うと Syn ERROR になる
 ※対策:ループを Lbl / Goto に置き換えるか、ループ脱出に Break を使う
この現象は、fx-5800Pfx-9860G 以降のグラフ関数電卓で共通して確認されている。
⇒ 楽屋裏 - Dsz によるループ脱出 参照
カシオお客様サポートのご担当者とのやりとりの結果、ループの後 (必ずしも直後でなくても良い) に Goto 0:Lbl 0 と記述することでこのエラーを回避できることが分かっている (詳細は上記記事参照)。


処理速度の比較

四則演算および関数計算

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

fx-9860GII のプログラム
fx7000G_source_adding_up_Isz2 AddTest_For 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

fx-9860GII のプログラム
FuncTest_Goto_9850 FuncTest_For_985 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍

fx-4800P
A=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒 11.5 倍
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
CFX-9850GGoto20.9 秒5.9 倍98.3 秒12.8  倍
For9.2 秒13.4 倍84.3 秒15.0 倍
CFX-9850GC PLUSGoto22.0 秒5.6 倍100 秒12.6 倍
For9.2 秒13.4 倍85.4 秒14.8 倍
fx-9860G [SH3]
OS 1.02
Goto2.1 秒61.6 倍14.6 秒86.4 倍
For1.3 秒94.7倍13.2 秒95.6 倍
OS 1.03Goto2.1 秒61.6 倍14.4 秒87.6 倍
For1.1 秒111.9 倍13.1 秒96.3 倍
OS 1.04Goto2.5 秒61.6 倍14.3 秒88.2 倍
For1.2 秒102.6 倍13.0 秒97.1 倍
OS 1.05Goto2.3 秒61.6 倍14.3 秒88.2 倍
For1.2 秒102.6 倍13.1 秒96.3 倍
OS 2.01Goto3.6 秒34.2 倍17.0 秒74.2 倍
For2.5 秒49.2 倍15.1 秒83.6 倍
fx-9860GII [SH3]OS2.00Goto4.5 秒27.4 倍18.2 秒69.3 倍
For2.7 秒45.6 倍15.6 秒80.9 倍
fx-9860GII [SH4]OS2.04Goto6.7 秒18.4 倍19.2 秒65.7 倍
For3.8 秒32.4 倍15.4 秒82.0 倍
OS2.09Goto6.8 秒18.1 倍18.8 秒67.1 倍
For3.9 秒31.6 倍15.0 秒84.1 倍
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

いずれの処理も 1つ前のモデル fx-9860G に比べて遅くなっている。そして、SH3搭載の前期モデルよりも、SH4搭載の後期モデルが遅くなっている。


グラフィックス描画
▶ ドット描画プログラム

fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて fx-9860GII でも 95 x 63 ドットを塗りつぶして処理速度を比較する。

fx-7000G のプログラム
fx7000G_Dot DOT_fx7000G  

fx-9860GII のプログラム
Dot_Plot Dot_Pxl 9860GII_DOT
Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。

PxlOnPlot
fx-7000G213 秒---------
CFX-9850G926.5 秒0.23 倍496.0 秒0.43 倍
CFX-9850GC PLUS901.1 秒0.24 倍929.1 秒0.23 倍
fx-9860G [SH3]OS 1.02251.2 秒0.85 倍255.7 秒0.83 倍
OS 1.03251.7 秒0.84 倍256.6 秒0.83 倍
OS 1.04252.8 秒0.84 倍257.5 秒0.83 倍
OS 1.05251.9 秒0.85 倍256.7 秒0.83 倍
OS 2.01295.8 秒0.72 倍301.7 秒0.71 倍
fx-9860GII [SH3]OS2.00300.0 秒0.71 倍306.2 秒0.70 倍
fx-9860GII [SH4]OS2.04288.3 秒0.74 倍291.1 秒0.73 倍
OS2.09301.7 秒0.71 倍303.8 秒0.70 倍

fx-9860GII は、fx-9860G より処理速度が少し遅くなっている。
PxlOn と Plot のドット描画処理速度は同レベルで、PxlOn の方が Plot よりも僅かに速い。この傾向は1つ前のモデル fx-9860G と同じである。

但し、fx-7000G よりは依然として遅い。加算処理や関数処理は大幅に高速化しているのに、ドット描画が大変遅いのは、画面更新時にVRAMからのデータ転送自体に時間がかかっているためだ。


画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。

ところで新世代Casio Basic で用意されている Getkey コマンドは [AC]を除く全てのキーに個別に対応しており、Locate コマンドは任意の位置へのテキストの出力が可能であることから、画面がスクロールさせずに自由度の高いプログラムを書ける。そして画面がスクロールしないプログラムでは、画面更新速度が極めて重要な評価ポイントになる。これが適用できるのは、CFX-9850G, CFX-9850GC PLUSfx-9860G, そして 今回取り上げる fx-9860GII なので、これらのプログラムを比較する。

出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。

グラフィックス画面更新プログラム - モンテカルロ法による円周率計算 - MONTECAR
Monteca_9860GII  
プログラムのダウンロード - Montecar.g1m を電卓に転送する
プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べる。

テキスト画面更新プログラム - ピタゴラス数の計算 - PYTHA
9860GII_Pytha  
プログラムのダウンロード - PYTHA.g1m を電卓に転送する
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。

PYTHAMONTECAR
CFX-9850G294.3 秒165.6 秒
CFX-9850GC PLUS295.2 秒0.99 倍267.7 秒0.62 倍
fx-9860GOS 1.0276.0 秒3.87 倍115.4 秒2.55 倍
OS 1.0389.3 秒3.30 倍115.8 秒2.54 倍
OS 1.0489.4 秒3.29 倍115.8 秒2.54 倍
OS 1.0589.2 秒3.30 倍115.9 秒2.54 倍
OS 2.0195.8 秒3.07 倍128.7 秒2.29 倍
fx-9860GII [SH3]OS2.00100.1 秒2.94 倍131.5 秒2.24 倍
fx-9860GII [SH4]OS2.0487.1 秒3.38 倍135.9 秒2.17 倍
OS2.0983.0 秒3.54 倍135.5 秒2.17 倍

GetkeyLocate を最初に搭載した CFX-9850G を基準に、処理速度の比率も合わせて示した。

MONTECAR はグラフィック画面にドットを繰り返し描画する。fx-9860G (SH3) に対して fx-9860GII (SH3) では処理速度が少し低下している。VRAMから画面への転送速度には変わりが無いので、機能が増えた分遅くなっていると思われる。

一方で、PYTHA はテキスト画面にテキストを繰り返し出力する。fx-9860GII (SH4) では テキスト出力の処理速度が上がっており、OS2.04 よりも OS2.09 でさらに向上している。fx-9860GII (SH4) は PLL回路の逓倍率 (14.75 MHz の整数倍) が fx-9860Gfx-9860GII (SH3) よりも 8 倍大きくなっていることが寄与していると思われる。


プログラム電卓の系譜 

単なる計算やグラフ表示のマクロ言語から脱却し、アプリケーションとしてのプログラムを書けるように進化した 新世代Casio Basic を搭載し、初めてアドインプログラムを走らせることができて、それを開発するための公式SDKを提供した野心的なモデルが fx-9860G シリーズであった。この基本仕様の完成度を高めた後継モデルが fx-9860GII シリーズだ。

北米の学校教育用に圧倒的シェアを有していた TI-84 Plus シリーズへの対抗モデルとして性能と価格で競争力のある fx-9860GII の前期モデル、後期モデルが投入されたが、シェアを大きく奪うまでには至らなかった。前期モデルと後期モデルの間に高精細カラー液晶搭載の fx-CG10 PRIZM を北米で発売しており、北米市場での競争の激しさを物語っている。

fx-9860GIIOS2.xx の機能が、1つ前のモデル fx-9860G のOSアップデートとして提供されたのも、競争力強化の施策の1つであろう。

fx-9860GII シリーズでは、新世代Casio Basic が大幅に拡張 (文字列処理、グラフ描画、表計算、統計計算のコマンドが追加増強) された。その背景にはグラフ関数電卓としてのグラフ描画機能、表計算機能、統計計算機能のアップデートがある。 

ハードウェア面では、fx-9860GII で液晶バックライトが標準装備されたのが大きな改善点だ。このバックライト機能は、2007年発売(ただし日本では未発売)の fx-9860G Slim で初めて搭載されたものだ。 

fx-9860GII は2009年発売のモデルであるが、そのハードウェアとソフトウェアの基本仕様は、2021年現在の最新モデル fx-CG50fx-9860GIIIfx-9750GIII にまで引き継がれていることから、カシオのグラフ関数電卓の基本仕様は fx-9860GII で完成したといえる。

fx-9860GII シリーズに続いて、表現力の高い高精細カラー液晶搭載モデルが投入されることになる。 




温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ


テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - fx-9860G

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える - 
<目次>


 
2020/01/04
追記 2020/01/09
修正 2021/07/18
追記修正 2021/08/15

過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。

6. 新世代 Casio Basic の登場 - プログラム機能の大幅な向上

今回は、CFX-9850GC PLUS の後継機として海外で2005年発売の fx-9860G を取り上げる。国内では、fx-5800P が先に発売され(2006年9月)、その後に fx-9860G が発売されている (2006年10月以降)。国内と海外で発売時期が異なるのは珍しいことではない。
2006年9月発行のカシオ電卓総合カタログ
2007年12月発行のカシオ電卓総合カタログ

カシオ機に搭載されたプログラム言語に初めて GetkeyLocate が追加され、画面スクロール無しで入出力ができるようになったのが CFX-9850G であった。これに関数やコマンド類が追加され、このシリーズ最終モデルが CFX-9850GC PLUS であったが、プログラミング言語としては色々な癖があり、使い易いとは言えなかった。

CFX-9850GC PLUS の後継機種として、その言語仕様ならびにエディタ画面が大幅に改善された fx-9860G が今回取り上げるモデルで、これには 新世代Casio Basic と言うべき言語が搭載されていた。

[2020/01/07 追記]
2005年に発売されてから、fx-9860G の基本設計はそのまま新機種 (例えば、2020年での fx-CG50) に引き継がれてているのは、このモデルの設計がどれだけ野心的であったか、そしてその完成度の高さを示している。


Casio fx-9860G

fx-9860G_Calc
fx-9860G が、欧米で2005年に発売され、国内では 2006年10月以降(おそらく2007年?)に発売された。

カタログ 取扱説明書 (e-Gadgetサイト) 

CPUは、日立製SH3のカスタムチップ SH7705を使っている。

メインメモリは 63KBで、Casio Basicを含めたOSが格納されている。

fx-9860G
の最大の特徴の1つはアドインプログラムが使えるようになったことで、1.5MBもの(当時としては広大な)ストレージメモリ(保存メモリ)を備えており、アドインプログラムを保存し走らせることが出来る。なお、アドインプログラム作成用のSDKも公開された。SDKの入手

なお、オーストラリア版の fx-9860G AU は、理由が不明だがストレージメモリが 0.8MB と少ない。

液晶周りの光沢コーティングや筐体裏側のつや消し黒塗装は高級感を演出していて、個人的には好きなデザインだ。

OSの変遷
2005年の発売当初のOSバージョンは 1.02、その後 1.03、1.04、1.05 とアップデートファイルが提供された。
2009年に fx-9860GII (SH3, OS2.00) が発売されると、機能を近づけた(実は完全に同じにならなかった) fx-9860G 用の OS2.00 へのアップデートファイルが公開され、その後 OS2.01 へのアップデートファイルが提供された。

OS 1.02 と 1.03 では Casio Basicの処理速度には大きな違いがなく、一連のバージョンの中で最速であった。OSがアップデートするにつれCasio Basicのデバッグと機能追加が進むが、一方で処理速度は遅くなる傾向は確実にある。実際にベンチマークを行った結果は以下に示す。

電源の変更
1つ前の機種 CFX-9850GC PLUS までは、駆動用電池に加えてバップアップ用電池を使っていた。fx-9860G も初期はバックアップ用のコイン型リチウム電池CR2032を用いていたが、そのうちバックアップ電池を使わずに単四電池4本のみでバックアップ機能を実現するようにマイナーアップデートされた。

fx-9860G_Battery_Case2 
左は コイン型リチウム電池 CR2032 を使うモデル、右は 単四4本のみでバックアップ機能のあるもの。バックアップ電池用の樹脂型が修正され、その跡が見てとれるのが興味深い。この電源周りのバージョンアップは特にアナウンスされないままマイナーバージョンアップされたようだ。

関数電卓としての性能

分数表示と演算精度
235÷658 を計算すると 0.3571428571 と表示される。ここで、[F↔D]キーを押すと 5/14  と表示される。計算精度は内部15桁だ。

複素指数関数
eπi を計算してみる。計算できれば答えは -1 になる。
1つ前の機種 fx-9850GC PLUS では複素指数関数の計算ができず、演算エラー(Ma ERROR) になったが、fx-9860G で初めて複素指数関数の計算に対応した。

一方、e(5/3)πi を計算させると、0.5 - 0.8660254038i と表示され、[F↔D]キーを押すと 1/2 - 0.8660254038i  と表示される (OSバージョンによらない)。なお、次の機種 fx-9860GII 以降は自然数式表示機能が徹底され、これを計算すると 1/2 - √3/2i と表示される。

積分計算 [2021/01/09 追記]
時間のかかる積分計算として以下の計算を調べる。
Integral_! 
※ 積分の詳細はこちら

モデル名 (OSバージョン)結果出力処理時間
fx-9860G Slim (OS2.00)3.14159265421.5 秒
fx-9860G (OS2.01)3.14159265422.3 秒
fx-9860G Slim (OS1.11)3.14159265423.6 秒
fx-9860G (OS1.03)3.14159265426.2 秒

fx-9860Gシリーズは、最初の出力が分数になり、[F↔D] キーを押すと π と表示される。
OSバージョンが 1.xx から 2.xx に変わると積分計算が速くなる。
同じOSバージョンでも、fx-9860G よりも fx-9860G Slim の方が速い。
 

搭載言語 (Casio Basic) の概要

fx-9860G OS1.0x では、CFX-9850GC PLUS の搭載コマンドと同一である。その後 OS2.01 では 次機種の fx-9860GII で追加された文字列処理や細かなコマンドと同じものが追加された。

主なコマンド (OS1.0x) [2020/01/07 修正 ※]
 - 入力:?→, Getkey
 - 出力:" ", , Locate
 - テキスト画面消去:ClrText
 - 無条件ジャンプ:Goto / Lbl
 - 条件ジャンプ: (fx-4000P、7000G と同じ仕様)
 - カウントジャンプ:Isz, Dsz
 - 条件分岐:If / Then / Else / IfEnd
 - For ループ:For / To / Step / Next
 - Do ループ:Do / LpWhile
 - While ループ:While / WhileEnd
 - 制御コマンド:Break, Return, Stop
 - 比較演算: =,, >, <,,
 - 論理演算: And, Or, Not
 - 配列:無し
 - リスト:List (配列としても使える)
  ※但し、x→Dim List 1 の初期化ができず、{1,2,3,4,5}→List 1 とする必要がある
  ※一方で、ClrList は正常動作する

 - 行列:Mat (配列としても使える)

  ※ {m,n}→Dim Mat A で初期化できず、ClirMat がないので行列機能はまだ不十分
 - 各種関数

1つ前の機種 CFX-9850GC PLUS の以下の問題は解消されている;
 - Then / Else 直後の改行:Syn ERROR になる
 - 行頭での改行 (空白行):Sys ERROR になる

 主なグラフィック コマンド [OS1.0x]
 - グラフ設定:CoordOn/CoordOff, GridOn/GridOff,
        AxesOn/AxesOff, LabelOn/LabelOff
 - 座標系設定:ViewWindow,
        Xmax/Xmin/Xscl/Xfct, XdotYmax/Ymin/Yscl/
Yfct
 - 消去コマンド:ClrGraph, Cls
 - Sketchコマンド:Plot, PlotOn/PlotOffPlotChg, LINE,
          PxlOn, PxlOff, PxlChg
PxlTest(, Text,
          F-Line, Vertical, Horizontal, Circle
 - 各種グラフコマンド

但し、Plot, PlotOn, PlotOff, PlotChg, PxlOn, PxlOff, PxlChg, Circle の詳細仕様は、CFX-9850GC PLUS と異なり、これらのコマンドのパラメータに X, Y を使えるが、これらのコマンドを実行すると論理座標系での X と Y の値が 変数 X と Y に自動的に入力される仕様を意識して X と Y を使う必要がある。


プログラムの作成と実行
キーコード取得プログラムを入力した。コマンドを入力するためのキー (キープレス) は、1つ前の CFX-9850GC PLUSfx-9860Gシリーズ、fx-9860GIIシリーズ、最新の fx-CGシリーズと全く同じだ。言語機能の基本仕様は1つ前の機種 (CFX-9850GC PLUS) から固まっていることが分かる

ファイル名:GETKEY
Locate 1,1,"=== Get Keycode ==="
Locate 1,3,"Keycode ="
Locate 10,5,"Hit Any Key"
Locate 13,7,"[AC]:Quit"
Do
While Getkey
WhileEnd
Do:Getkey→K
LpWhile K=0
Locate 9,3,"=   "
(スペース6個)
Locate 11,3,K
LpWhile 1


Keycode 
この画面は、[DEL]キーを押して、キーコード44が表示されているところだ。
なお、fx-9860G では アルファベットの小文字をプログラムで使えるようになった。
fx-9860GIIシリーズや fx-CGシリーズと同様に、テキスト表示の範囲は21桁、7行だ。

プログラムリスト
Program_List 
Program List には、アルファベット順にプログラム名 (ファイル名) が並んでおり、アルファベット順になっていなかった CFX-9850GC PLUS の入力順という仕様よりも大幅に使いやすく改善されている。

プログラムの編集
プログラム編集画面は、挿入モードになっており、使いやすい。

1つ前の CFX-9850GC PLUS まではプログラム編集は上書きモードになっており、極めて使いづらかった。ちなみにスタンダード関数電卓 (fx-991MSなど) も上書きモードになっていた。実は、2005年以降発売のプログラム電卓 (fx-9860G) やスタンダード関数電卓 (fx-991ES) から一斉に上書きモードに変更されている。

おもしろいことに、シャープも40周年記念モデルが発売されたほぼ同じ時期に上書きモードから挿入モードに一斉に切り替えられているようだ。余談だが、ソニー創業者の一人である井深大氏の著書(「ボスニアの夜は更けて」だったと思う...)で、"技術の連通管現象" ということを書かれている。世の中の技術の進歩はどこかで底通していて、そのレベルは同じように上がる、どこかだけのレベルが上がることはない、といった意味のことであり、これが思い出される。
 
パソコンで文章を書く時は、通常は挿入モードで利用しているはずで、上書きモードは必要な時のみ切り替えて使うと思う。fx-9860Gシリーズ以降のプログラム電卓では、プログラム編集画面は常に挿入モードになっていて、必要な時に [SHIFT]-[DELL](INS) と押して上書きモードに切り替えて使う。

以前のプログラム電卓やポケコンでは、区切り文字を使ってプログラムをズラズラと1行に書いていた。fx-9860G において、そのく仕様から完全に決別したと言える。


プログラムの転送
3Pin_USB_Link PCリンク : 3Pin - USB ケーブル利用
3pin-USBケーブル (SB-88) と プログラムリンク ソフトウェア (FA-124) を使えばPCリンクや電卓の画面取得が可能になる。
3pin-USBケーブル (SB-88)
現在は製造中止品だが、takumako様により互換ケーブルが有償頒布されているので私はこれを利用した。
プログラムリンク ソフトウェア (FA-124)
カシオのサイトから無償ダウンロードできる。

 電卓間転送
3pin-3pinケーブル (SB-62) を使えば、3pin端子のあるグラフ関数電卓とプログラムの転送ができる。
3pin-3pinケーブル (SB-62)
まだ販売されているが、takumako様により互換ケーブルが有償頒布されている。SB-62 は fx-9860Gシリーズや fx-CGシリーズの国内正規版には標準添付されている。

USB_USB_Link PCリンク:USB (mini) - USA (A) ケーブル利用 
fx-9860G に同梱される USB(mini)-USB(A)ケーブルを用いると、3Pin-USBケーブル利用よりも高速に転送可能だ。プログラムリンクソフトウェア (FA-124) を使えばPCリンクや電卓の画面取得が可能になる。


ところで、PCへ転送されるファイルは g1m ファイル (拡張子 g1m) だ。










テキストベース・プログラム
モグラ叩きゲーム
以前 fx-9860GII で作ったアクションゲーム - "Whack-a-Mole (もぐら叩き)" を転送した。fx-9860G の OS2.0 以上なら完全互換で動作した。ここで転送したプログラムファイルは、WHACKAMOWAMINPI の3つだ。

WAM_1 WAM_2 

fx-9860G OS1.02OS1.05 では、RanInt#( 関数が備わっていないので、RanInt#( の代わりに Int(Ran#( を使って同等に動作するように変更する必要があった。OS2.0 以上にアップデートすれば、RanInt#( 関数が追加さるので、fx-9860GII と完全互換で動作するようになる。


fx-9860G でのプログラミング

1つ前の CFX-9850GC PLUS からの改善点
CFX-9850GC PLUS のプログラミング言語 Casio Basic は数々の問題が残っていたが、fx-9860G で殆ど改善された。以下に個別の項目を列挙する。

空行 (改行のみの行) はSyn ERROR になる
 この問題は改善された。これは、昔の1行プログラミングの時代の影響が解消された。

Then / Else の直後を改行すると Syn ERROR になる
 この問題は改善された。上の空行禁止の問題の解消と併せて、If ステートメントの可読性が大いに向上した。

ループ (While / Do) の2重構造で、内側のループと If の入れ子構造が共存すると IfEnd のところで Syn ERROR になる
 この問題は改善された。このエラーは、While / DoIf の構造制御のスタック管理に失敗しているバグと考えられ、構造制御ステートメント While / Do を追加した直後に潜り込んだバグだったと思われる。 

出力 "" で内部カーソルが改行されない
 この問題は改善された。

行末に区切り文字 : があると Syn ERROR になる
 この問題は改善された。

出力文字列に : を含む行を ' でコメントアウトすると Syn ERRORになる
 ※対策:機切り文字 : の直後に ' を付加する
この問題は、fx-9860Gだけでなく、fx-9860GII や fx-CGシリーズにも残っており、カシオは操作マニュアルを修正して対応している。詳しくは 楽屋裏 - Casio Basic コメントアウト '  のバグ を参照

出力命令 " " では1文字ごとに出力する
"Strings" を実行するとタイプライターのように、左から1文字づつ出力されることは無くなった

fx-9860G OS1.0x では実装されていない関数やコマンドでの Syn ERROR
例えば、Whack-a-Mole (モグラ叩きゲーム) で使っている、RanInt#( は OS2.00 以降にはあるが、OS1.0x には無い。そこで、以下のようにすれば対抗可能だ。 
- RanInt#(1,9)Int(90Ran#÷10)+1 に変更
- RanInt#(1,3)Int(30Ran#÷10)+1 に変更
- RanInt#(0,9)Int(10Ran#) に変更

Do / While / For ループからの脱出に Dsz / Isz を使うと Syn ERROR になる
 ※対策:ループを Lbl / Goto に置き換えるか、ループ脱出に Break を使う
この現象は、fx-5800Pfx-9860G 以降のグラフ関数電卓でも存在することが確認されている。
⇒ 楽屋裏 - Dsz によるループ脱出 参照
カシオお客様サポートのご担当者とのやりとりの結果、ループの後 (必ずしも直後でなくても良い) に Goto 0:Lbl 0 と記述することでこのエラーを回避できることが分かっている (詳細は上記記事参照)。


処理速度の比較

四則演算および関数計算

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

fx-9860G のプログラム
fx7000G_source_adding_up_Isz2 AddTest_For 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

fx-9860GS のプログラム
FuncTest_Goto_9850 FuncTest_For_985 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍

fx-4800P
A=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒 11.5 倍
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
CFX-9850GGoto20.9 秒5.9 倍98.3 秒12.8  倍
For9.2 秒13.4 倍84.3 秒15.0 倍
CFX-9850GC PLUSGoto22.0 秒5.6 倍100 秒12.6 倍
For9.2 秒13.4 倍85.4 秒14.8 倍

fx-9860G

OS 1.02
Goto2.1 秒61.6 倍14.6 秒86.4 倍
For1.3 秒94.7倍13.2 秒95.6 倍
OS 1.03Goto2.1 秒61.6 倍14.4 秒87.6 倍
For1.1 秒111.9 倍13.1 秒96.3 倍
OS 1.04Goto2.5 秒61.6 倍14.3 秒88.2 倍
For1.2 秒102.6 倍13.0 秒97.1 倍
OS 1.05Goto2.3 秒61.6 倍14.3 秒88.2 倍
For1.2 秒102.6 倍13.1 秒96.3 倍
OS 2.01Goto3.6 秒34.2 倍17.0 秒74.2 倍
For2.5 秒49.2 倍15.1 秒83.6 倍
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

加算処理、数値積分(関数処理) は格段に高速化し、FX-502P の 100倍程度だ。Goto / Lbl ループより For の方が倍近く速い。
OSのバージョンにより、処理速度の差が顕著に表れている。OS 1.03 と OS 1.04 が最も高速だ。
次機種 fx-9860GII の登場に併せてがOS 2.01 へのアップデートファイルが提供され、使える関数が増強された。但し処理速度は遅くなった。


グラフィックス描画
▶ ドット描画プログラム

fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて fx-9860G でも 95 x 63 ドットを塗りつぶして処理速度を比較する。

fx-7000G のプログラム
fx7000G_Dot DOT_fx7000G  

fx-9860G のプログラム
Dot_Plot Dot_Pxl 
Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。

PxlOnPlot
fx-7000G213 秒
CFX-9850G926.5 秒0.23 倍496.0 秒0.43 倍
CFX-9850GC PLUS901.1 秒0.24 倍929.1 秒0.23 倍
fx-9860GOS 1.02251.2 秒0.85 倍255.7 秒0.83 倍
OS 1.03251.7 秒0.84 倍256.6 秒0.83 倍
OS 1.04252.8 秒0.84 倍257.5 秒0.83 倍
OS 1.05251.9 秒0.85 倍256.7 秒0.83 倍
OS 2.01295.8 秒0.72 倍301.7 秒0.71 倍

fx-9860G では、CFX-9850GC PLUS よりも3倍程度高速化している。
また1つ前の CFX-9850GC PLUS では、PxlOn によるドット描画は Plot の2倍程度の処理時間であったが、fx-9860G では PxlOnPlot は同等レベル、PxlOn が僅かに高速であった。

但し、fx-7000G よりは依然遅い。加算処理や関数処理は大幅に高速化しているのに、ドット描画が大変遅い理由として画面更新が大変遅いことが挙げられる。


画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。

ところで Getkey コマンドが返すキーコードは、テンキーや[EXE]キーだけでなく、[AC]を除く全てのキーに対応しており、Locate コマンドで任意の位置への出力が可能なので、プログラムの自由度が大きく、画面がスクロールしないプログラムを書ける。そして画面がスクロールしないプログラムでは、画面更新速度は重要な評価ポイントになる。これが適用できるのは、CFX-9850G, CFX-9850GC PLUS そして fx-9860G なので、これらのデータを比較する。

出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。

グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算 - MONTECAR
Moneca_fx-9860G 
プログラムのダウンロード - Montecar.g1m を電卓に転送する
プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べる。

テキスト画面更新プログラム - ピタゴラス数の計算 - PYTHA
Pytha_fx9860G 
プログラムのダウンロード - PYTHA.g1m を電卓に転送する
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。

PYTHAMONTECAR
CFX-9850G294.3 秒165.6 秒
CFX-9850GC PLUS295.2 秒0.99 倍267.7 秒0.62 倍
fx-9860GOS 1.0276.0 秒3.87 倍115.4 秒2.55 倍
OS 1.0389.3 秒3.30 倍115.8 秒2.54 倍
OS 1.0489.4 秒3.29 倍115.8 秒2.54 倍
OS 1.0589.2 秒3.30 倍115.9 秒2.54 倍
OS 2.0195.8 秒3.07 倍128.7 秒2.29 倍

GetkeyLocate を最初に搭載した CFX-9850G を基準に、処理速度の比率も合わせて示した。

MONTECAR はグラフィック画面にドットを繰り返し描画する。fx-9860G での処理速度向上は3倍以上になった。PYTHA はテキスト画面に文字を繰り返し出力する。fx-9860G での処理速度は 2.3~2.5倍程度となった。これらの比較から、fx-9860G ではテキスト出力、グラフィックス出力共に速くなり、グラフィックス出力高速化がより顕著である。

fx-9860G のOS が 1.0x から 2.01 にアップデートされると、明らかに画面出力が遅くなったことも併せて分かる。


プログラム電卓の系譜 

単なる計算やグラフ表示のマクロ言語から脱却し、アプリケーションとしてのプログラムを書けるように進化した 新世代Casio Basic を搭載したのが fx-9860G だ。後からアップデート可能なOSとアドインプログラムを格納できるフラッシュメモリを搭載し、アドインプログラムを開発するための公式SDKを提供するなど、カシオのプログラム電卓の中で極めて大きな進化を遂げた野心的なモデルであり、現行モデルの基本設計がこのモデルで固まった。

1999年に登場した TI-83 Plus が同様のコンセプトを有しており、それを取り込んだ仕様になっている。その後 2004年に発売された TI-84 Plus への対抗モデルが fx-9860G 発売の背景にあると考えるのが妥当であろう。

TI-83 Plus 内蔵プログラミング言語は、TI-Basic、マシン語、アセンブラ、C言語であるが、カシオは Casio Basic 内蔵のみであったのは残念でならない。アドイン開発用の純正SDKを用意することで C言語での開発環境が提供された。一方、カシオ自身が Basic-Like 言語といっている Casio Basic だが、新たな言語の開発にリソースを割いていない。しかし結果的に古いモデルからの上位互換が確保され、マクロ言語ではなく、使いこなすことで実用プログラムを作れるレベルまで進化しており、次のモデル fx-9860GII でさらに完成度があがる。

プログラム編集モードにおいて 挿入モードがデフォルトになった点は一見目立たない変更であはるが、高く評価できる。2005年発売の fx-9860G だけでなく、この年以降に発売されるプログラム電卓と関数電卓の全てがデフォルトで挿入モードに変更されているのは、カシオ電卓事業における大きな判断があったと思われる。

2005年発売の fx-9860G のハードウェア仕様、関数やコマンド類全てにおける基本設計は、2020年現在の fx-CG50 にまで引き継がれている。

fx-9860G は、新たにUSBポートを備え、PCとUSBケーブルでリンクできるようになり、従来の 3Pin - USB接続よりも高速なデータ転送が可能になった。SDカードをストレージとして使える fx-9860G SD が同時発売されたことから、データ保存とデータリンクに新たな機能を提供するモデルとなった。

さらに 2007年発売の fx-9860G Slim も重要なモデルで、クラムシェル(2つ折り)タイプで小型化しつつ液晶画面の大型化が実現した。ハンドヘルド電卓として世界初のバックライト機能も追加された。(fx-9860G Slim については別途まとめている)

fx-9860G シリーズは、ハードウェアとソフトエアの基本設計は、その後のグラフ関数電卓に色濃く引き継がれている。カシオの電卓開発史上、最重要のマイルストーンと言って良いと思う。

fx-9860G シリーズに搭載されている Casio Basic は、fx-4000Pfx-7000G の上位互換の仕様を有しており、Casio Basic の系譜は fx-9860G に引き継がれ、大きく改善され、ようやくマクロ処理ではない実用的なアプリ開発が可能な言語に仕上がった集大成が fx-9860G である。

fx-9860G の 新世代Casio Basic からグラフィクス、I/O機能と文字列処理機能が削られ、入力コマンドの改善と配列変数が追加されたサブセット版が fx-5800P に搭載され、この流れと並行して直系の改良版が fx-9860GII に引き継がれることになる。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ


テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - CFX-9850GC PLUS

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
<目次>


 
2019/06/23
追記修正 2020/01/04
追記修正 2021/01/11
追記修正 2021/08/15


過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。

5. 新世代 Casio Basic 登場前夜 - 可読性と機能の向上(2)

今回は、2004年発売の CFX-9850GC PLUS を取り上げる。国内では 2005年1月に発売された。海外では2010年まで発売されていたが、国内では2006年には生産中止扱いになり、2007年にはカタログに掲載されなくなった。国内でのカタログ掲載期間は1年8ヶ月と短かった。
2005年1月発行のカシオ電卓総合カタログ
2006年9月発行のカシオ電卓総合カタログ

カシオ機に搭載されたプログラム言語で、Basicコマンドが追加されたものを欧米のプログラム電卓コミュニティでは Casio Basic と呼ばれている。私も当ブログ開設当初から Casio Basic という呼称を使っていた。

Casio BasicGetkeyLocate が追加されたのが CFX-9850G であった。その後、コマンドや関数が追加され、シリーズ最終の CFX-9850GC PLUS が登場した。この機種の後継として fx-9860G が発売され、これ以降の機種に搭載された言語を当ブログでは "次世代Casio Basic" と呼称している。

fx-9860G の1つ前の機種である CFX-9850GC PLUS はCFXシリーズの最終形であり、新世代Casio Basic 登場前夜と言える。


Casio CFX-9850GC PLUS

CFX-9850GC_PLUSCFX-9850GC_PLUS_Manual

2004年海外で発売、2005年1月 に国内発売開始、海外では2004年発売。
カタログ 取扱説明書 (Casioサイト) 取扱説明書 (e=Gadgetサイト) 

64KBのメモリ領域にシステムも含まれており、それ以外がプログラムやデータに使える。取扱説明書の表紙から分かるのは、fx-9750G PLUS(モノクロ液晶)など複数の機種とほぼ共通の仕様になっている。

取扱説明書で分からない Casio Basic の使いこなし が当ブログのメインテーマなので、実際に触ってみたいと思い、以前から中古品を探していた。


実際に入手した CFX-9850GC PLUS
幸運なことに、eBayで "未使用品 - 動作確認のため開封" というものを見つけたので入手した。EU域内保証書が添付されていた。
 CFX-9860GC_PLUS_1 CFX-9850GC_PLUS_2 
実際に傷や汚れが一切なく、新品状態であった。

CFXシリーズは、3色カラー液晶搭載のグラフ関数電卓で、デフォルトがブルーで、オレンジとグリーンを追加した3色が使える。実際の画面は、輝度も色もコントラストが低い。液晶を見る角度でコントラストや色合いが大きく変化するのも見づらさの原因だ。明るいところでは問題ないが、少し暗くなると見づらいと感じる。実際にしばらく使い続けると多少は慣れた。
CFX-9850GC_PLUS_Display 

fx-9860GIIシリーズのメニュー画面を比較する。
CFX-9850GC_PLUS_Display fx-9860GII_SD_Display 
液晶のバックグランドが黄色みが強いことも視認性の悪さの原因だと感じる。
また、この3色カラー液晶は応答性が悪い。

なお、CFX-9850GC PLUSの液晶画面のサイズは、fx-9860Gシリーズと比較すると小さいことが分かる。
Disp_Size_9859GC_9860GII 


関数電卓としての性能 [2019/06/25 追記]
キーの種類と配置は、後継機のfx-9860Gシリーズと同じになっている。但し、[SHIFT] と一緒に押して選ぶ裏の機能やファンクションメニューの機能は fx-9860G よりは少なく、当然ながら後継機で進化しているわけだ 。

分数表示と演算精度
235÷658 を計算すると 0.3571428571 と表示される。計算精度は内部15桁で、後継機種 fx-9860Gと同じ。
ここで、[F↔D] キーを押しても 5/14 にはならない。ここは、後継機種 fx-9860Gと異なる。

複素指数関数
eπi を計算してみる。計算できれば答えは -1 になる。
Complex 
fx-9850GC PLUS では複素指数関数の計算ができず、演算エラー(Ma ERROR) になる。但し、複素数の加減乗除はできる。
後継機種の fx-9860G以降のモデルでは複素指数関数の計算に対応している。


搭載言語 (Casio Basic) の概要 [2019/8/18 追記]

追加されているBasicコマンドによりプログラムの可読性と機能が向上し、さらに GetkeyLocate が追加されているのでプログラムの自由度が向上している。さらに CFX-9850G よりも関数が追加されている。

主なコマンド
 - 入力:?→, Getkey
 - 出力:" ", , Locate
 - カラーコマンド:Orange, Green (" "とSketchコマンドにのみ有効)
 - 無条件ジャンプ:Goto / Lbl
 - 条件ジャンプ: (fx-4000P、7000G と同じ仕様)
 - カウントジャンプ:Isz, Dsz
 - 条件分岐:If / Then / Else / IfEnd
 - For ループ:For / To / Step / Next
 - Do ループ:Do / LpWhile
 - While ループ:While / WhileEnd
 - 制御コマンド:Break, Return, Stop
 - 比較演算: =,, >, <,,
 - 論理演算: And, Or, Not
 - 配列:無し
 - リスト:List (配列としても使える)
 - 行列:Mat (配列としても使える)、機能としてはまだ不完全(下記参照)
  
初期化コマンド Dim が追加されているが ClrMat が無いので、プログラム内で行列領域を削除できない。 
 - 各種関数

但し、以下の要因により可読性が損なわれている。
 - Then / Else 直後の改行:Syn ERROR になる
 - 行頭での改行 (空白行):Sys ERROR になる

 主なグラフィック コマンド
 - グラフ設定:CoordOn/CoordOff, GridOn/GridOff,
        AxesOn/AxesOff, LabelOn/LabelOff
 - 座標系設定:ViewWindow,
        Xmax/Xmin/Xscl/Xfct, XdotYmax/Ymin/Yscl/
Yfct  Xdotが追加されている
 - 消去コマンド:ClrGraph, Cls
 - Sketchコマンド:Plot, PlotOn/PlotOffPlotChg, LINE,
          PxlOn, PxlOff,
PxlTest, Text,
          F-Line, Vertical, Horizontal, Circle
 - 各種グラフコマンド

但し、Plot, PlotOn, PlotOff, PlotChg, PxlOn, PxlOff, PxlChg, Circle の詳細仕様は、後継の fx-9860G 以降とは異なる。CFX-9850GC PLUS ではこれらのコマンドのパラメータに X, Y を使うと誤動作する。X, Y は内部動作のために予約されていると思われ、これらのコマンドを実行すると予期せぬ値が X, Y に自動的に入力されてしまう。つまり、X, Y をパラメータに使ってはいけない。

後継機種である fx-9860G 以降 fx-CG50 までのグラフ関数電卓では上記のコマンド実行後に、それぞれのコマンドの詳細仕様に従った正しい値が X と Y に自動的に入力される。つまり、その詳細仕様を理解していれば上記のコマンドのパラメータに X, Y を使える。


プログラムの作成と実行
キーコード取得プログラム GETKEY を入力してみた。コマンドを入力するためのキー (キープレス) は、fx-9860Gシリーズや最新の fx-CGシリーズと全く同じだ。言語機能の基本仕様はこの機種の頃から固まっていることが分かる

ファイル名:GETKEY
Locate 1,1,"=== GET KEYCODE ==="
Locate 1,3,"KEYCODE ="
Locate 10,5,"HIT ANY KEY"
Locate 13,7,"[AC]:QUIT"
Do
While Getkey
WhileEnd
Do:Getkey→K
LpWhile K=0
Locate 9,3,"=   "
(スペース6個)
Locate 11,3,K
LpWhile 1


GETKEY 
[DEL]キーを押したところ、キーコード44が表示されている。
fx-9860Gシリーズや fx-CGシリーズと同様に、テキスト表示の範囲は21桁7行だ。

[AC]キーを押してプログラムを終了させると、画面下8行目に Break と表示される。
ここで、[EXE] を押すとプログラムが再起動し、もう一度 [AC] を押すとProgram List に戻らず RUNモードに切り替わる。
この仕様は、fx-9860Gシリーズや fx-CGシリーズとは異なる。完成したプログラムを繰り返し使うには便利な仕様だ。一方、プログラムを試してから修正する場合は面倒だ。RUNモードに戻った後、[MENU] を押して PRGMモードに移行して編集するプログラムを探す必要がある。

Program List には、プログラム名 (ファイル名) は入力した順序で並んでおり、アルファベット順になっていない。プログラムの数が多いと、編集あるいは実行したいプログラムを探すのが楽ではない。

CFX-9850GC PLUSProgram List でプログラムを探す最善の方法は、サーチ(検索)機能だ。Program List 画面で [F6] (▷) - [F1] (SRC) と押せば Search For Program 画面が現れるので、そこで探しているプログラム名の頭のアルファベットを押せば良い。すると同じ頭文字で始まるプログラム名が全て表示される。この機能は必須だ。

ところで、取扱説明書には、以下の記述がある。
Program_Manual_Note
繰り返し計算や複雑な計算を便利に実行するのが、プログラム機能の主目的だと考えれば、プログラム終了後に Program List 画面に戻らず、RUMモードになる仕様は、理にかなっている。


プログラムの編集 [2019/07/01 修正]
プログラム編集画面は、極めて使いにくい。

パソコンで文章を書く時は、通常は挿入モードで利用しているはずで、上書きモードは必要な時のみ切り替えて使うと思う。fx-9860Gシリーズや fx-CGシリーズでも、プログラム編集画面は常に挿入モードになっていて、必要な時に [SHIFT]-[DELL](INS) と押して上書きモードに切り替えて使う。

ところが、CFX-9850GC PLUS は、通常が上書きモードになっていて、[SHIFT]-[DELL](INS) を押して挿入モードに切り替える必要がある。一旦挿入モードに切り替えると、改行を超えない範囲でカーソル移動する限りは挿入モードが維持されるが、カーソルが改行を超えると上書きモードに戻ってしまう。改行から改行までを1行として認識し、その行内なら挿入モードが維持されるのは、ラインエディタの仕様をそのままマルチラインのエディタに持ち込んでると考えるのが妥当であろう。そのためマルチラインエディタとして編集の利便性が得られず残念な仕様と言える。

昔のプログラム電卓やポケコンで、区切り文字を使ってプログラムをズラズラと1行に書く時の仕様を、そのまま引きずっているのではないかと想像している。


プログラムの転送 [2019/08/15 追記修正]

PClink_9850GC_Plus2 PCリンク
3pin-USBケーブル (SB-88) と プログラムリンク ソフトウェア (FA-124) を使えばPCリンクや電卓の画面取得が可能になる。
3pin-USBケーブル (SB-88)
現在は製造中止品だが、takumako様により互換ケーブルが有償頒布されているので私はこれを利用した。
プログラムリンク ソフトウェア (FA-124)
カシオのサイトから無償ダウンロードできる。

 電卓間転送
3pin-3pinケーブル (SB-62) を使えば、3pin端子のあるグラフ関数電卓とプログラムの転送ができる。
3pin-3pinケーブル (SB-62)
まだ販売されているが、takumako様により互換ケーブルが有償頒布されている。SB-62 は fx-9860Gシリーズや fx-CGシリーズの国内正規版には標準添付されている。

PCへ転送されるファイルは CAT ファイル (拡張子 cat) だ。CATファイルには複数プログラムを格納できる。
具体的な操作方法は FA-124 のマニュアルを参照のこと。

ところで、電卓本体右下にある3pinコネクタには、防塵防滴用と思われるゴム製の "栓" が刺さっている。ある程度使われた中古品だとこれが無くなっているケースが多いのではないかと思う。無くしやすいので要注意だ。


fx-9860Gシリーズからのプログラムの移植
以前作ったプログラムの入った fx-9860Gシリーズと CFX-9850GC PLUS を 3pinケーブル (SB-62) で接続し、プログラムを CFX-9850GC PLUS に転送する。次にプログラムを走らせ、エラーが出たら [◀] か [▶] キーを押すとエラーが発生したコマンドにカーソルが表示されている。そこでカーソルのある部分を修正できるので、移植作業は比較的楽だ。当然エラーが発生している原因と対策を知っておく必要がある。具体的には、以下で紹介しているので、参照ください。

テキストベース・プログラム
モグラ叩きゲーム
以前作ったアクションゲーム - "Whack-a-Mole(もぐら叩き)" を転送して、必要な変更を行ってから遊んでみた。ついでにトップ画面のタイトルをオレンジにしてみた。デフォルトはブルーになっている。
ここで転送して修正したプログラムファイルは、WHACKAMOWAMINPI の3つだ。
プログラムのダウンロード - ダウンロードした Whackamo.cat には上記3つのプログラムを含む
Whack-a-Mole_9850GC 

CFX-9850GC PLUS の処理速度に対応するために、WHACKAMO の冒頭にある変数A の初期化を 2→A と変更しただけで、ロジックは変えていない。他は CFX-9850GC PLUS の搭載言語の制限に合わせて、エラーが出なくなるように修正を行うだけで移植は完了する。搭載言語のこの制限と修正方法については後述する。

実際に遊んでみると、液晶のハードウェアとしての応答性が悪い割にはゲームとして遊べて、それほど悪い感じはしない。表示が始まってところで反応できるから、表示が完了するまでのタイムラグが問題にならないのだろうと思う。

キーコード取得プログラム
以前作ったキーコード取得プログラムを転送し、エラーが出なくなるように必要な修正を行って CFX-9850GC PLUS / fx-9750G 専用に変更した。
プログラムのダウンロード - Keycode.cat
GetKey_1 GetKey_2 
左:起動直後の画面、右:キーコード取得プログラム、[EXIT] キーを押してみたところ。

CFX-9850GC PLUSfx-9860Gシリーズ / fx-CG シリーズは、全く同じキーを備えており、キーコードも同一になっている。従って、CFX-9850GC PLUS 特有の修正を行えば、ロジックや数値を変更せずに移植が可能となる。

さて、このプログラムや上のモグラ叩きゲームで、アルファベットの小文字が表示されていることにお気づきだろうか?

CFX-9850GC PLUS
 本体では、プログラム編集画面で小文字アルファベットを入力する方法が見つからない。ところが、小文字を使ったプログラムを fx-9860Gシリーズから転送したら小文字が表示されているのだ。

システムには既に小文字フォントが準備されていて、コードさえ入力されればプログラムで使えるようになっている。fx-5800P も同じ事情で、CcEditor / CcLinker を使えば 小文字アルファベットやその他フォントが使える。

温度換算プログラム
以前作った温度換算プログラムを転送し、エラーが出なくなるように必要な修正を行った。
ここで、転送・修正したプログラムファイルは、TEMPCONV と IN の2つだ。
プログラムのダウンロード - ダウンロードした TempConv.cat には TEMPCONV と IN が含まれる
TempConv 

プログラムの構造、ロジックは全く変更せず、プログラムが正常に動作する。

和暦-西暦換算・年齢推定プログラム - あの人の歳は今いくつ?
以前作った 和暦-西暦換算・年齢推定プログラムを転送して、エラーを解消する変更を実施した。長押し判定のカウンタの初期値Lを実機の処理速度に合わせて30に変更した (プログラム冒頭に 30→L と変更)。
転送・修正したプログラムファイルは、YEARCONV、YRC、YRD、INPI の4つだ。
プログラムのダウンロード - ダウンロードした YearConv.cat には YEARCONV, YRC, YRD, INPI の4つが含まれる。
YearConv 

ある程度複雑な構造でも、CFX-9850CG PLUS 搭載言語の制限や欠点を理解すれば、移植できることが分かった。


CFX-9850GC PLUS でのプログラミング

プログラミング上の制限と注意点 - fx-9860Gシリーズ / fx-CGシリーズとの比較

空行 (改行のみの行) はSyn ERROR になる
 ※対策空行を削除する
 対策を実施すると、ソースコードが非常に見づらくなる。特にブロック構造を意識した分かりやすいプログラミングには困った仕様だ。幸いコメントアウト ' が使えるので、空行の代わりに
'== 
などと書けば良いが、ソースレベルでブロック構造を分かりやすく見るには空行はとても便利だ。それが出来ないのは発展途上の欠点だと敢えて申し上げたい。これは、昔の1行プログラミングの時代の影響を引きすっていると感じられる。

Then / Else の直後を改行すると Syn ERROR になる
 ※対策Then / Else 直後の改行を削除する
 対策を実施すると、ソースコードが見づらくなる。上の空行禁止を組み合わさると、If ステートメントが非常に分かりにくくなる。ソースレベルで、ブロック構造を意識した見やすいコードを書けないにのは困った仕様だ。
これも、昔の1行プログラミングの影響をまだ引きずっている結果だと感じられる。

ループ (While / Do) の2重構造で、内側のループと If の入れ子構造が共存すると IfEnd のところで Syn ERROR になる
 ※対策:外側のWhile / DoLbl / Goto に置き換える。Break が有れば新たに Goto ジャンプに置き換える
 対策を施すと、スパゲティ化の第一歩となり、分かりやすいブロック構造を意識したプログラミングの大敵だ。個人的には最大の問題と感じている。
このエラーは、上記の 温度換算プログラムと和暦・西暦換算・年齢推定プログラムをfx-9860GII から転送して発見した。
While / DoIf の構造制御のスタック管理に失敗しているバグと考えている。昔は Goto / Lbl しか無かったところに構造制御ステートメントを追加している過渡期に潜り込んだバグがまだ解消していないのだろう。
取扱説明書の第22章ライブラリー編に掲載されているサンプルプログラムでは、構造制御に While / Do を使ったものが無く、全て Lbl / Goto が使われていることから、この時点で While / Do の機能が不完全だったと考えている。 

出力 "" で内部カーソルが改行されない
 ※対策"" で内部カーソルの改行機能を当てにせず Locate で表示位置を明示的に指定する
"" はNOP (何もしない) 処理になっているかも知れない。
"" で内部カーソル行を制御しているプログラム (fx-5800Pfx-9860G 以降のグラフ関数電卓で正常動作しているもの) を転送した場合、CFX-9850GC PLUS では画面配置が崩れる。

行末に区切り文字 : があると Syn ERROR になる
 ※対策:行末の区切り文字 : を削除する
 対策を実施しても大きな問題はない。
区切り文字は改行と同じ内部実装になっていれば、空行でエラーになるのと同じ原因なのだろう。

カラーコマンドは " " 出力には有効だが、Locate 出力には無効 [2019/05/25 追記]
 ※対策:有効な対策はない。"" で内部カーソルが改行されないので Locate を " "出力に変更できないことが多いためだ。
 カラーコマンドには、Orange と Green がある。Orange "String" と書けば String がオレンジ色で表示される。
一方、Locate コマンドで出力する場合は、カラーコマンドを追加すると Syn ERRORになる。 

出力文字列に : を含む行を ' でコメントアウトすると Syn ERRORになる
 ※対策:機切り文字 : の直後に ' を付加する
この問題は、fx-9860Gシリーズや fx-CGシリーズにも残っており、カシオは操作マニュアルを修正して対応している。
詳しくは 楽屋裏 - Casio Basic コメントアウト '  のバグ を参照

出力文字列に : を含んでも Syn ERRORにならない
これは、後継機種の fx-9860Gの OS2.1 かそれ以前のバージョンではエラーになっており、OS2.04 以降で修正されており、この修正は fx-9860GIIfx-CG20、そして最新の fx-CG50 まで維持されている。それなのに fx-9860G よりも古い CFX-9850GC PLUS で同じエラーが発生するかと思えば、エラーにならないのは、面白い。
改行のみの空行や区切り文字が行末にあることを許すように変更した際に、新たにバグが入り込んだと推測される。細かいようではあるが、このような開発の苦労や経緯が透けてくるのは面白い。 

出力命令 " " では1文字ごとに出力する
"Strings" を実行するとタイプライターのように1左から1文字づつ出力される。一方 Locate 1,1,"Strings" を実行すると、文字列が一度に出力される。

fx-9860Gシリーズ以降の機種からの移植では、実装されていない関数やコマンドで Syn ERROR
 ※対策:使えるコマンドを使って別表現に変更する (当たり前ですね)
今回移植を試みたプログラムには一例として、RanInt#( があったので、それぞれ以下のように別表現にした。 
- RanInt#(1,9)Int(90Ran#÷10)+1 に変更
- RanInt#(1,3)Int(30Ran#÷10)+1 に変更
- RanInt#(0,9)Int(10Ran#) に変更

Do / While / For ループからの脱出に Dsz / Isz を使うと Syn ERROR になる [2019/06/30 追記]
 ※対策:ループを Lbl / Goto に置き換えるか、ループ脱出に Break を使う
この現象は、fx-5800Pfx-9860G 以降のグラフ関数電卓でも存在することが確認されている。
⇒ 楽屋裏 - Dsz にとるループ脱出 参照
カシオとのやりとりの結果、ループの後 (必ずしも直後でなくても良い) に Goto 0:Lbl 0 と記述することでこのエラーを回避できることが分かっている (詳細は上記記事参照)。ところが、CFX-9850GC PLUS では、この対処方法が効かない。


処理速度の比較

四則演算および関数計算

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

CFX-9850GC PLUS のプログラム
fx7000G_source_adding_up_Isz2 AddTest_For 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

CFX-9850GC PLUS のプログラム
FuncTest_Goto_9850 FuncTest_For_985 
クリア絵師に Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800PA=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒11.5 秒 
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
CFX-9850GGoto20.9 秒5.9 倍98.3 秒12.8  倍
For9.2 秒13.4 倍84.3 秒15.0 倍
CFX-9850GC PLUS
Goto22.0 秒5.6 倍100 秒12.6 倍
For9.2 秒13.4 倍85.4秒14.8 倍
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

Basicコマンドとして追加された For 文は効率化、高速化している。Basicコマンドは可読性向上だけでは無いことが分かる。併せて関数処理も高速化していることが分かる。但し、CFXシリーズ初号機である CFX-9850G よりは少し遅くなっている。インタープリター言語なので、コマンドが追加されたことが原因だと思われる。


グラフィックス描画
▶ ドット描画プログラム

fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて CFX-9850GC PLUS でも 95 x 63 ドットを塗りつぶして処理速度を比較する。

fx-7000G のプログラム
fx7000G_Dot DOT_fx7000G  

CFX-9850GC PLUS のプログラム
Dot_Plot Dot_Pxl fx9850GC_Plus_Dot 
Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。

PlotPxlOn
fx-7000G213 秒
CFX-9850G926.5 秒0.23 倍496.0 秒0.43 倍
CFX-9850GC PLUS901.1 秒0.24 倍929.1 秒0.23 倍

CFX-9850G と全く同じコードであるにも関わらず、CFX-9850GC PLUS では遅くなっている。
PxlOn によるドット描画は、CFX-9850G の2倍の時間がかかった。
fx-7000G と比べると、処理が4倍以上遅くなった。


画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。

ところで Getkey コマンドの追加によりテンキーと[EXE]キーだけでなく、[AC]を除く全てのキー入力が検知可能になり、Locate コマンドの追加により任意の位置への出力が可能になったので、プログラムの自由度が大きく向上し、画面がスクロールしないプログラムを書けるようになった。画面がスクロールしないプログラムでは、画面更新速度は重要な評価ポイントになる。

出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。

CFX-9850GC PLUS で調べる。
以下は CFX-9850G の結果で、CFX-9850GC PLUS のデータを後日追加する。

グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算
fx9850GCplus_Montekar 
プログラムのダウンロード - Montecar.cat を電卓に転送する
プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べる。

テキスト画面更新プログラム - ピタゴラス数の計算
CFX9860GCplus_Pytha 
プログラムのダウンロード - Pytha.cat を電卓に転送する
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。

[2020/01/04 追記]
GetkeyLocate が初めて搭載された CFX-9850GCFX-9850GC PLUS の結果を比較した。
PYTHAMONTECAR
CFX-9850G294.3 秒---165.6 秒---
CFX-9850GC PLUS295.2 秒0.99 倍267.7 秒0.62 倍

CFX-9850G に比べてグラフィック画面出力 (MONTECAR) と テキスト画面出力 (PYTHA) ともに遅くなった。
特に、テキスト画面への繰り返し出力は60%程度に速度低下している。関数やコマンドが追加されたので、当然ながら処理が遅くなったと言える。速度向上には、CPUやOSの大きな改訂が必要であり、次の機種である fx-0860G でそれが実現されている。


プログラム電卓の系譜 [2019/08/15 追記修正]

CFXシリーズの最終機種である CFX-9850GC PLUS は、CFX-シリーズの初号機 CFX-9850G と同じ仕様の言語を搭載しているが、処理速度が遅くなっている。CFX-9850G よりも関数や機能が増強されているので多少処理が遅くなるだろうと思う。しかしグラフィックスのドット描画については、特に PxlOn の処理が倍程度遅くなっているのは意外であった、

さて、CFX-9850GC PLUS に搭載されたプログラミング言語は、CFX-9850G と同様に Baiscコマンドとして IfFor / While / Do / Getkey / Locate などが追加されているが、編集画面で考えながらコーディングするのは難しいと思う。

後継機種である fx-9860G では、搭載言語と編集画面の大幅な修正が行われた。この改良は、fx-9860G と同年に発売された fx-5800P にも反映されている。

編集画面については、FX-502P / FX-602P / FX-603P では、デフォルトで挿入モードになっており、必要に応じて 上書きモードに切り替える仕様になっている。ところが、その後の fx-3650Pfx-4000P シリーズ、fx-7000G シリーズ そして CFXシリーズの最終モデル CFX-9850GC PLUS に至るまで、デフォルトで上書きモードになっていた。

当時、欧米市場での競合であった TI の電卓でも84シリーズのような古くからある機種では上書きモードが主流であった (sentaro様による情報、コメント欄参照)。

ところが、2005年に発売された機種、fx-71Ffx-5800Pfx-9860G では、一斉に挿入モードに切り替わっている。プログラミングのできない関数電卓においても、fx-991MS まではデフォルトで上書きモードで、2005年発売の次機種 fx-991ES から挿入モードに切り替わっている (2005年1月の電卓総合カタログ参照。

[2019/07/01 追記]
コメント欄に情報をお寄せいただいたsentaro様によれば、SHARP製の関数電卓も以前は上書きモードだったが、2004年以降のモデルは挿入モードに変わっているとのこと。Casioとほぼ同時期に変更されているようだ。

sentaro様の考察によれば(コメント欄参照)、欧米、特に北米での学校販売ビジネスでしのぎを削っていた TI 機と使い勝手の異なる挿入モード機を一斉に投入するには、ビジネス上のリスクを伴う大きな判断があったに違いないとのことだ。私もそれに賛同する。その上で、一斉に挿入モードに切り替えたのは、グラフ関数電卓やプログラム関数電卓の将来の目標 / ビジョンがあったのではないかと私は想像している。それは計算補助のマクロ機能を超えて、より柔軟な一般的なプログラミングが可能な言語仕様を目指すことであった、と想像している。

LocateGetley コマンドの存在は、スクロールしないプログラムを可能にするが、これらのコマンドは CFXシリーズの初代 CFX-9860G に初めて追加された。CFXシリーズは、プログラム関数電卓、ポケコン、グラフ関数電卓それぞれで個別に開発が進んでいた搭載言語が、ようやく1つの方向性に収束し、Locate / Getkey コマンドを追加することで柔軟なプログラミングが可能になり、大きく進化した。3色限定とは言えカラー表示を可能にしたのも CFXシリーズの特徴であり、各種コマンドや関数を増強した最終機種 CFX-9850GC PLUS は、カシオ機搭載のプログラミング言語の歴史の重要な転換点を示しており、次世代Casio  Basic 登場前夜の記念すべきモデルと言える。

Casio Baisc は fx-9860G シリーズでさらに進化してゆく。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ













テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - CFX-9850G

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
<目次>


 
2019/08/14
追記修正 2019/12/03
追記修正 2021/08/15


過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。


4. Casio Basic 登場 - 可読性と機能の向上 (1)


今回は、世界初のグラフ関数電卓 fx-7000P シリーズの後、プログラム言語としてターニングポイントとなる仕様追加を果たした CFX-9850G を取り上げる。

1996年に発売された CFX-9850G には、いくつかの Basic コマンドが追加されており、LocateGetkey コマンドが初めて搭載されたことは、電卓で実用的なプログラムを作るためには非常に重要な出来事と言って良いと思う。

当ブログで使っている Casio Basic という呼称は、カシオが公式に使っているものではないが、欧米のプログラム電卓愛好家のコミュニティでは以前から使われている。当ブログでは、当初管理人が CasioBasic と呼んでいたが、その後海外のコミュニティで同じ名称が使われているのを知った。

但しそれらの海外のコミュニティにおいて Casio Basic の明確な定義が見当たらない。当ブログでは以前から、Basic風のコマンドが追加された搭載言語を "Casio Basic" と呼んでいる。

さらに進化して下記の条件を備えたものを当ブログでは "新世代Casio Basic" と呼んでいる。
 - Locate と Getkey を含んだ Basic コマンドが追加されている
 - 行頭の改行がエラーにならない
 - Then と Else 直後の改行がエラーにならない


今回は、"新世代" 前夜の "Casio Basic" に焦点を当てる。


Basicコマンドの追加

ネットで得られる操作マニュアルを調べたところ、最初にBasicコマンドが追加されたのは、1995年フランスで発売された GRAPH 20 (fx-9610aG) であり、世界市場で最初に Basicコマンドが搭載されたのは、1996年発売の fx-7400G であった。
  GRAPH 20 (fx-9610aG) の User's Manual 
 ▶ fx-7400G の User's Manual - Programming編
これらでは、If 文、For 文、Do 文、While 文、Break、Return、Stop が追加されている。 


Locate, Getkey の追加

カシオのプログラム電卓で、初めて Locate コマンドと Getkey コマンドが追加されたのは、1996年発売の CFX-9850G であった。

それまでの搭載言語では、入力検知できるのはテンキーと[EXE]キーのみ、文字列や数値の出力は " " コマンドや  コマンドで行うが出力位置は指定できなかった。ところが、Getkey コマンドが追加されたことで、[AC]キー以外の全てのキーの入力を個別に検知できるようになり、Locate コマンドが追加されたことで、出力位置を自由に設定できるようになった。これにより、画面がスクロールしないプログラムを書けるようになり、プログラムの自由度が格段に向上した。極めて大きな進化といえる。

CFX-9850G は、LocateGetkey が初めて追加された機種だ。カシオのプログラム電卓の系譜で重要なマイルストーンだ。CFX-9850G の系統には下記がある。
- CFX-9850G / CFX-9850G Plus / CFX-9850GA Plus / CFX-9850GB Plus (1996 1998)
- CFX-9950G / CFX-9959GB Plus (1996 - 2003)
- CFX-9850GC Plus
(2004 - 2010、2005年国内発売)


CFX-9850G
が発売された頃は、fx-4500Pfx-4800P が販売されていた。
1996年4月発行のカシオ電卓総合カタログ - CFX-9850G (国内では 1996年3月発売), fx-4500P, fx-4800P


Casio CFX-9850G

CFX-9850G_22GBのメモリに、プログラム領域26KBが含まれる。

CFXシリーズは、3色カラー液晶搭載のグラフ関数電卓で、デフォルトがブルーで、オレンジとグリーンを追加した3色が使える。実際の画面は、輝度も色もコントラストが低い。液晶を見る角度でコントラストや色合いが大きく変化するのも見づらさの原因だ。明るいところでは問題ないが、少し暗くなると見づらいと感じる。この3色カラー液晶は応答性が悪い。

CFX9850G_Display 

プログラムの転送
PClink_9850G_2 PCリンク
3pin-USBケーブル (SB-88) と プログラムリンク ソフトウェア (FA-124) を使えばPCリンクや電卓の画面取得が可能になる。
3pin-USBケーブル (SB-88)
現在は製造中止品だが、takumako様により互換ケーブルが有償頒布されている。
プログラムリンク ソフトウェア (FA-124)
カシオのサイトから無償ダウンロードできる。

 電卓間転送
3pin-3pinケーブル (SB-62) を使えば、3pin端子のあるグラフ関数電卓とプログラムの転送ができる。
3pin-3pinケーブル (SB-62)
まだ販売されている。takumako様により互換ケーブルが有償頒布されている。

ところで、電卓本体右下にある3pinコネクタには、防塵防滴用と思われるゴム製の "栓" が刺さっている。ある程度使われた中古品だとこれが無くなっているケースが多いのではないかと思う。


搭載言語 (Casio Basic) の概要
Basicコマンドが追加されたことでプログラムの可読性と機能が向上し、さらに GetkeyLocate が追加されたことでプログラムの自由度が向上している。

主なコマンド
 - 入力:?→, Getkey
 - 出力:" ", , Locate
 - カラーコマンド:Orange, Green (" "とSketchコマンドにのみ有効)
 - 無条件ジャンプ:Goto / Lbl
 - 条件ジャンプ: (fx-4000P、7000G と同じ仕様)
 - カウントジャンプ:Isz, Dsz
 - 条件分岐:If / Then / Else / IfEnd
 - For ループ:For / To / Step / Next
 - Do ループ:Do / LpWhile
 - While ループ:While / WhileEnd
 - 制御コマンド:Break, Return, Stop
 - 比較演算: =,, >, <,,
 - 論理演算: And, Or, Not
 - 配列:無し
 - リスト:List (配列としても使える)
 - 行列:Mat (配列としても使える)、
但し初期化コマンド Dim は適用できない
 - 各種関数
GRAPH20fx-7400G 以降で追加されたBasicコマンドを青色で示す
CFX-9850G で追加されたコマンドを赤色で示す

但し、以下の要因により可読性が損なわれている。
 - Then / Else 直後の改行:Syn ERROR になる
 - 行頭での改行 (空白行):Sys ERROR になる

 主なグラフィックス コマンド
 - グラフ設定:CoordOn/CoordOff, GridOn/GridOff,
        AxesOn/AxesOff, LabelOn/LabelOff
 - 座標系設定:ViewWindow,
        Xmax/Xmin/Xscl/Xfct, Ymax/Ymin/Yscl/
Yfct
 - 消去コマンド:ClrGraph, Cls
 - Sketchコマンド:Plot, PlotOn/PlotOff, PlotChg, LINE,
          PxlOn, PxlOff, PlxChg
PxlTest, Text
          F-Line, Vertical, Horizontal, Circle

但し、Plot, PlotOn, PlotOff, PlotChg, PxlOn, PxlOff, PxlChg, Circle の詳細仕様は、後継の fx-9860G 以降とは異なる。CFX-9850G ではこれらのコマンドのパラメータに X, Y を使うと誤動作する。X, Y は内部動作のために予約されていると思われ、コード上予期せぬ値が X, Y に自動的に入力されてしまう。つまり、X, Y をパラメータに使ってはいけない。

後継機種である fx-9860G 以降 fx-CG50 までのグラフ関数電卓では、上記のコマンドで X, Y を使える。各コマンド実行後に、それぞれのコマンドの詳細仕様に従った正しい値 (論理座標系での値) が自動的に入力されるので、それを正しく理解すれば X, Y をパラメータとして使っても問題ない (積極的に使えば有用なこともある)。


プログラムの作成と実行
キーコード取得プログラム GETKEY を入力してみた。コマンドを入力するためのキー (キープレス) は、fx-9860Gシリーズや最新の fx-CGシリーズと全く同じだ。言語機能の基本仕様はこの機種の頃から固まっていることが分かる

ファイル名:GETKEY
Locate 1,1,"=== GET KEYCODE ==="
Locate 1,3,"KEYCODE ="
Locate 10,5,"HIT ANY KEY"
Locate 13,7,"[AC]:QUIT"
Do
While Getkey
WhileEnd
Do:Getkey→K
LpWhile K=0
Locate 9,3,"=   "
(スペース6個)
Locate 11,3,K
LpWhile 1


Getkeycode_1 Getkeycode_DEL  
[DEL]キーを押したところ、キーコード44が表示されている。
fx-9860Gシリーズや fx-CGシリーズと同様に、テキスト表示の範囲は21桁7行だ。

[AC]キーを押してプログラムを終了させると、画面下8行目に Break と表示される。
ここで、[EXE] を押すとプログラムが再起動し、もう一度 [AC] を押すとProgram List に戻らず RUNモードに切り替わる。
この仕様は、fx-9860Gシリーズや fx-CGシリーズとは異なる。完成したプログラムを繰り返し使うには便利な仕様だ。一方、プログラムを試してから修正する場合は面倒だ。RUNモードに戻った後、[MENU] を押して PRGMモードに移行して編集するプログラムを探す必要がある。

Program List には、プログラム名 (ファイル名) は入力した順序で並んでおり、アルファベット順になっていない。プログラムの数が多いと、編集あるいは実行したいプログラムを探す最善の方法は、サーチ(検索)機能だ。Program List 画面で [F6] (▷) - [F1] (SRC) と押せば Search For Program 画面が現れるので、そこで探しているプログラム名の頭のアルファベットを押せば良い。すると同じ頭文字で始まるプログラム名が全て表示される。この機能は必須だ。


プログラムの編集
プログラム編集画面は使いにくい。
パソコンで文章を書く時は、通常は挿入モードで利用しているはずで、上書きモードは必要な時のみ切り替えて使うと思う。fx-9860Gシリーズや fx-CGシリーズでも、プログラム編集画面は常に挿入モードになっていて、必要な時に [SHIFT]-[DELL](INS) と押して上書きモードに切り替えて使う。

ところが、CFX-9850G は、通常が上書きモードになっていて、必要な時に [SHIFT]-[DELL](INS) を押して挿入モードに切り替える。一旦挿入モードに切り替えると、カーソルのある行内で挿入モードが維持されるが、カーソルが別の行に移ると上書きモードに戻ってしまう。


fx-9860Gシリーズからのプログラムの移植
以前 fx-9860Gシリーズで作ったプログラムを CFX-9850G に転送した。fx-9860Gシリーズは"次世代Casio Basic"を搭載しており、CFX-9850G への移植にはコードへの若干の手直しが必要だ。多くの場合はなんとかなるが、移植不可能、あるいは極めて困難なケースもある。

モグラ叩きゲーム
Whack-a-Mole_1 Whack-a-Mole_2  
fx-9860GII
で作ったアクションゲーム - "Whack-a-Mole(もぐら叩き)" は移植できた。トップ画面のタイトルをオレンジにしてみた。CFX-9850G の処理速度に対応するために、WHACKAMO の冒頭にある変数A の初期化を 2→A と変更しただけで、ロジックは変えていない。実際に遊んでみると、液晶の応答性の悪さは、さほど気にならない。
 Whack-a-Mole のダウンロード

キーコード取得プログラム
fx-9860GIIで作ったキーコード取得プログラムを移植した後、CFX-9850G 用になるよう表示を一部変更した。
 Keycode_1 Keycode_MENU 
左:起動直後の画面、右:キーコード取得プログラム、[MENU] キーを押したところ。

CFX-9850G は、fx-9860Gシリーズや fx-CGシリーズと全く同じキーを備えており、キーコードも同一になっている。
 Keycode のダウンロード

ところで、上記2つのプログラムは、fx-9860G から CFX-9850G に転送したもので、小文字アルファベットが表示されている。プログラム編集画面で小文字アルファベットを入力する方法は、CFX-9850G 本体には用意されていないが、小文字を使ったプログラムを転送すると小文字が表示されることから、システムには既に小文字フォントが準備されていることが分かる。

アルファベット小文字を出力させる他の方法もある。プログラムリンクソフトウェア FA-124 でCATファイルを開くとコードを編集でき、そこで出力文字列を小文字アルファベットに書き換えてから、このCATファイルを保存して CFX-9850G に転送すれば、プログラムで小文字アルファベットを表示可能になる。 



処理速度の比較

四則演算および関数計算

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

CFX-9850G のプログラム
fx7000G_source_adding_up_Isz2 AddTest_For 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

CFX-9850G のプログラム
FuncTest_Goto_9850 FuncTest_For_985 
クリア絵師に Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800PA=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒11.5 秒 
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
CFX-9850GGoto20.9 秒5.9 倍98.3 秒12.8  倍
For9.2 秒13.4 倍84.3 秒15.0 倍
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

Basicコマンドとして追加された For 文は効率化、高速化している。Basicコマンドは可読性向上だけでは無いことが分かる。併せて関数処理も高速化していることが分かる。


グラフィックス描画
▶ ドット描画プログラム

fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて CFX-9850G でも 95 x 63 ドットを塗りつぶして処理速度を比較する。

fx-7000G のプログラム
fx7000G_Dot DOT_fx7000G  

CFX-9850G のプログラム
Dot_Plot Dot_Pxl Dot_9850 
Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。

PlotPxlOn
fx-7000G213 秒
CFX-9850G926.5 秒0.23 倍496.0 秒0.43 倍

fx-7000G では Rangeコマンドで指定した論理座標系に従って Plot コマンドでドットを描画する。CFX-9860G では ViewWindowコマンドで指定した論理座標系に従って Plot コマンドでドットを描画する。

For 文は効率化・高速化されていることは上の例で分かっているが、ドット塗りつぶしプログラムでは CFX-9850G がかなり処理が遅い。グラフィック画面へのデータ転送に時間がかかっており、それがボトルネックになっていると考えられる。
fx-7000G の液晶は 95 x 63 = 5985 ドット、CGX-9850G は 127 x 63 = 8001 ドット、その差 2016 ドット。1ドット出力するたびに転送しているなら、CFX-9850G のグラフィック画面への転送は fx-7000G よりもデータが多いから転送が重い理由となり得る。 

CFX-9850G には、PxlOn コマンドが追加されている。このコマンドは左上が原点 (1, 1) の物理座標系でのドット描画コマンドであり、Plot よりは約2倍高速だ。PlxOn は論理座標系のように座標計算が不要なので高速になっていると考えられる。


画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。

ところで Getkey コマンドの追加によりテンキーと[EXE]キーだけでなく、[AC]を除く全てのキー入力が検知可能になり、Locate コマンドの追加により任意の位置への出力が可能になったので、プログラムの自由度が大きく向上し、画面がスクロールしないプログラムを書けるようになった。画面がスクロールしないプログラムでは、使い勝手の善し悪しが画面更新の速度に深く依存してくる。

出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。

そこで、グラフィックス画面とテキスト画面それぞれの更新速度を調べる。

グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算
MonteCar_9859 
プログラムのダウンロード - Montecar.cat を電卓に転送する
プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べると、165.6 秒であった。

テキスト画面更新プログラム - ピタゴラス数の計算
Pytha_9850 
プログラムのダウンロード - Pytha.cat を電卓に転送する
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べると、294.3 秒であった。


プログラム電卓の系譜

1996年発売の CFX-9850G に GetkeyLocate が初めて搭載された。これはCasio Basicの極めて大きな進化と言える。

世界初の手帳サイズのプログラム関数電卓として1978年に発売された FX-502P のプログラミング言語はキーストローク型で、表示レジスタやメモリに直接アクセスして演算を行うことで効率の高い処理が行え、プログラムのサイズも小さく抑えられる。一方でコードの可読性は決して良くなく、まるでアセンブリ言語のコードのようだ。シリーズ最終の FX-603P は1990年に発売され、CPUの高速化、メモリの増強、シリアル通信機能とPCリンク機能などハードウェアが充実しており、2006年の生産中止までの16年間製造が続いた。この間ポケットコンピュータが市場に登場し消えてゆき、プログラム関数電卓が生き残ったのは興味深い。

fx-3000Pシリーズやfx-4000Pシリーズでは、大きく異なる2系統の言語を搭載された機種が発売された。これらはいずれもコードの可読性が向上している。シンプルな計算マクロ言語を搭載した機種も発売された。シリーズ最終の fx-4850P は1997年に発売され、CPUの高速化、メモリ増強(26KB)などバードウェアが充実し 2006年まで生産が継続された。ハードウェアデザインやソフトウェアメニューが fx-5800P に引き継がれたが、一方で fx-4850P に搭載されていた言語は主流とはならず、1985年発売の fx-4000P の搭載言語の系統がその後のグラフ関数電卓の主流となり、fx-5800P にも搭載されたのが大変興味深い。

世界初のグラフ関数電卓 fx-7000G が1985年に発売された。fx-4000Pシリーズの初号機 fx-4000P も同年に発売されている。fx-7000G はグラフ機能以外は fx-4000P と同一の関数電卓としての機能とキーレイアウト、そして同一の搭載言語を有しているのは着目すべきだろう。fx-7000Gfx-4000P が同時開発された可能性も十分考えられる。

いずれにせよ、グラフ関数電卓初代の fx-7000G の言語系統がそのままグラフ関数電卓で発展してきている。これはネットで確認できるマニュアルを調べると明らかだ。1995年フランスモデルとして発売されたグラフ関数電卓 GRAPH 20、そして1996年に世界で発売された fx-7400G で初めてBasicコマンドが追加された。追加されたのは 条件分岐 (If) とループ (For, Do, While) 関連のコマンドで、処理効率の向上が図られた。また明らかにコードの可読性も向上した。Casio Basic 初版が登場したわけだ。しかし残念なことに、検出できる入力がテンキーと[EXE]キーに限定されており、出力位置もプログラムで制御できないものであった。

1996年に発売された CFX-9850G では、[AC]キー以外の全てのキーの入力を検知できる Getkey コマンド、そして任意の位置に出力できる Locate コマンドが追加された。このたかだか2つのコマンドの追加により、プログラムの自由度が飛躍的に向上した。大きな進化と言える。現行の最新機種 fx-CG50 や1つ前の fx-9860GII で動作するプログラムの多くが、CFX-9850G で動作するのは、その進化の大きさを示している。

但し CFX-9850G は、行頭に改行があると Syn ERROR となり、空行が許されない。さらに If 文で使う ThenElse の直後が改行だと Syn ERRORになってしまう。この残念な仕様のためコードの可読性が損なわれている。さらに行列の初期化コマンドが無いので変数を用いた行列の初期化ができないなどの基本的な仕様に、プログラミング言語としての問題が多く残っている。

さて、ドット描画コマンド Plot と PxlOn / PxlOff の詳細仕様が現行の最新機種とは異なり、理解できない動作をする。これについては 温故知新 - CFX-9850GC PLUS で述べる。

登場したばかりの Casio Basic は、まだ発展途上と言える。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新:番外編 - 電卓評価用の積分を解いてみた

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
目次

 
2021/07/03



番外編 - 電卓評価用の積分を解いてみた

プログラム電卓温故知新の記事、プログラム電卓やスタンダード関数電卓の評価記事では、計算能力を調べるために積分を利用している。

そこで、これらの積分を紙とペンで実際に解いて正しい解を計算してみる。他にも解き方はあると思う。いずれにせよ電卓の計算結果が正しいかどうかの確認になる。また実際に計算してみると積分の性質が少しは解る。

使っているのは、下記の積分;
1. 電卓で時間のかかる積分I

2. 
物理で良く使うガウス積分の類型Gauss

3. 定義域ギリギリでCORDICアルゴリズムを使う積分cos_ln

4. 電卓では苦手と思われる周期関数の積分periodi




1.I


左辺の積分を I とおき、さらに2つの積分に展開する。
TimeWastingIntegral_1

それぞれを FG とおくと、I = F + G となるので、FG をそれぞれ別に求める。
F G

=====

先ず、F の被積分関数を f(x) とする。
f(x)

これをよく見てみると、f(x) は奇関数である。以下の計算からも f(x) が奇関数だと示せる。
f(x)_1

従って、f(x)-2 から 2 まで積分すると、-2 から 0 の積分と0 から 2 までの積分が互いに打ち消し合うので、

 F_1

=====

次に、G を求める。
G

変数変換を行うために、以下の直角三角形の各辺の長さの関係を利用する。


Pytha

この各辺の関係を使って、x から θ に変数変換する。
cos 、sin

これらを変形すると以下の関係が得られる。
sqrt
x
x-2 → 2
θπ/2 → π/2

これらを使うと、以下の不定積分が得られる。
G_2

ここで、上記の変数変換の式
sin 
を変形すると、以下が得られる ( -π/2 < θ < π/2 )。
sin_2
(sin-1arcsin と同じ)

sin  と cos
を用いて、以下が得られる。
sincos_2

G_3

ここで得られた不定積分を使って、G を求める。
G_4

 G_5

=====

I = F + G  に F = 0G = π を代入する。

I_1



2.Gauss

Gauss_1

電卓の10桁の精度では、e-200 は0だから、この積分は1となる。

ちなみに、積分区間を 0 から 無限大に変えると、結果は正しく1になる。

Gauss_2



3.cos_ln

cos(ln x) が、オイラーの公式で展開したときの実部になるような複素数を考える。

Euler

ところで、左辺は以下のように変形できる。

Euler_1

Euler_2


これを使って cos(ln x) を積分すると、
cos_ln_1

ところで、xi の積分を計算すると、

cos_ln_2

これの実部が求める答えになる。

cos_ln_4

fx-CP400 を除く電卓では積分区間を [0, 1] とすると計算結果が 0.4999999999 となり 1/2 (=0.5) にならない。しかし積分区間を [-1010, 1] にすると、計算結果 1/2 が得られる。ln 0 の内部演算において、CORDICアルゴリズムを適用する際に - (無限小) によるエラーを回避しようとして誤差が発生していると思われる。実装されている CORDIC アルゴリズムの限界が垣間見える。

CCORDICアルゴリズムについては、以下を参照;
関数電卓のしくみ (CORDICアルゴリズム)



4.periodi

x-y直交座標での sin x の曲線を思い浮かべると、下記がわかる;
 ・x軸と |sin x| の間の面積は、1周期の区間では sin x の2倍
 ・区間 [-nπ, nπ] での積分は、区間 [0, π/2]での積分の 2n 倍

これに従って、式を変形すれば良い。

periodic_result





温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS
温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10 / fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII

温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - fx-CP400

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
<目次>


 
2021/05/16
修正 2021/06/01


過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする企画。


10. CAS機能と構造化Basicの搭載 - 新言語の試み

今回は、CASグラフ関数電卓 fx-CP400 (ClassPad II) を取り上げる。fx-CG500 は fx-CP400の機能限定, 北米モデルの位置づけになっている。

これらのモデルに搭載されている言語はカシオ仕様の構造化Basic で、本ブログで多く取り扱っている新世代 Casio Basic とは全く別の言語である。ここで 新世代Casio Basic とは、fx-9750GIII や fx-9860G シリーズのモノクロ液晶搭載グラフ関数電卓、fx-CG10/CG20/CG50シリーズの高精細カラー液晶搭載グラフ関数電卓、そして fx-5800P に搭載されている言語だ。本記事では主に登載されているカシオ仕様の構造化Basicについて調べた内容を紹介するが、最初に fx-CP400 の特徴あるハードウェアと機能について簡単に触れることにする。


ClassPadシリーズは、カシオのグラフ関数電卓の製品群の中で、数式を解析的に計算 (式の変形や微分/積分、展開など) ができる数式処理システム (Computer Algebra System) を備えている点に特徴がある。カシオ電卓で最初に CASが導入されたのは、1996年発売の CFX-9970G で、1999年発売の Algebra fx-2.0 にも搭載された。

その後、強化されたCAS機能を搭載した ClassPadシリーズ fx-CP300 が2003年に発売、fx-CP330 が2007年に発売され、fx-CP330 Plus が2012年ニ発売された。OSのアップデートによりCAS機能や各種プリインストール機能が強化され、ハードウェアも fx-CP330 Pus ではUSBケーブルでのPCリンク機能が搭載された。これらは全てモノクロ液晶であった。

2013年にカラー液晶搭載の CAS グラフ関数電卓 fx-CP400 が発売された。ClassPadシリーズは、残念ながら日本国内では販売されていない。

2017年には、fx-CG500 が北米で発売 (国内未発売)された。fx-CP400 はソフトウェアキーボードの配列を複数のタイプ (QWERTY, AZERTY, QWERTZ, ABC) から選択できるのに対して、fx-CG500 はソフトウェアキーボードがアルファベット順 (ABC) のみで、それ以外は fx-CP400 とほぼ同一のようだ。


Casio fx-CP400 (ClassPad II)

fx-CP400抵抗膜方式のタッチパネルにテンキーも備えた携帯端末であり、電卓と言うよりもタブレットに近い。

主なハードウェア仕様
- CPU:カスタム SH4 - SH7305
- 高精細カラー液晶:4.8インチ、320 x 580 ピクセル
- メインメモリ:2 MB
- e-Activity用メモリ:5.5 MB
- ストレージメモリ:24 MB
- 内部演算精度:15桁
- 保存数値桁数:10進数で661桁

ハードウェアキーは、四則演算に累乗計算が入力できる程度の少ないもので、キー1つの1つの機能のみが割り当てられている。[SHIFT]など他のキーと一緒に押して複数の機能が割り当てられる一般的な電卓とはかなり違っている。 温故知新:番外編 - 関数電卓としてに使い勝手 参照

関数計算や様々な機能を入力するには、[Keyboard]キーで呼び出すソフトウェアキーボードを使う。

付属品
白いプラスチックのスライドカバー、タッチペン、USBケーブル、3Pinケーブル、EU域の保証書、クイックマニュアルなどの紙片が付属している。

デザイン
fx-260 Solar II (第1世代関数電卓), fx-JP900 (第4世代関数電卓), fx-CG50 (カラーグラフ関数電卓) と共通した最近のカシオ電卓のデザインになっている。fx-CG50 との比較画像を見ると全く同じデザインだと分かると思う。
fx260_JP900_CG50_CP400_Top 
左から、fx-260 Solar IIfx-JP900fx-CG50fx-CP400

fx260_JP900_CG50_CP400_Back fx260_JP900_CG50_CP400_Case 
左の画像:筐体裏側、右の画像:ハードケース

Comon_Design 
fx-CP400 (左側)、fx-CG50 (右側) のキーボード周り - ほぼ同じデザインだと分かる

また、ClassPad のロゴがさりげなく入っている。
ClassPad_Logo 

OSアップデート / Screen Reciever
購入時のOSは Ver 2.01.4 であったが、Ver 2.01.6 にアップデートした。
その後、2021年1月13日に、Ver 2.01.7 にアップデートした。
アップデータは下記から入手できる。
Casio WORLDWIDE EDUCATION WEBSITE - Download Resources | Support | CAS Graphic Models

このページから 電卓画面をリアルタイムでPCに転送するScreen Receiver Ver 03.02 もダウンロードできる。このソフトウェアは fx-CG20 / CG50 でも使え、既に持っているならそのまま使える。


CAS電卓としての機能

fx-CP400 は、他のグラフ関数電卓にない計算精度と計算能力を持っている。大学の理科系以降で学ぶ数学を活用したり、高精度な計算を行う人向けと言って良いと思う。高い計算精度や計算能力を示す一例を以下で紹介する。

但し、"今さら高精度な計算をわざわざ電卓で行うくらいならパソコンで無償で入手できるCPythonを使った方が良い"、"チョットした計算やプログラムならCPythonで十分"、という風潮も出てきている昨今だ。するとfx-CP400fx-CG500 はCAS機能にその価値を見いだすことになろう。ClassPadは、学校教育向けに開発され最適化されてきた製品なので、一般的な技術者向けに最適化されていないのは、当然と言える。

なお、関数入力をソフトウェアキーボードから行うしかないので、関数電卓としては使い勝手が非常に悪い。
温故知新:番外編 - 関数電卓としての使い勝手


演算精度 (桁落ち)
123456789123456 - 123456789123411 = 45

となる筈だが、fx-5800Pfx-CG50 でこの減算を行うと、答えが 0  になる。 内部演算精度15桁ギリギリのところで最下位2桁の桁落ちが発生している。一方、fx-CP400 でこの計算を実行すると答えが 45 と正しく得られる。


演算桁数(指数部)
449! = 3851930518E+997

fx-CP400 は指数部が3桁、±999 だから、演算桁数が1000桁ある。他のグラフ関数電卓やプログラム関数電卓では、指数部は2桁なので 100桁以内の桁数となる。


複素指数関数
複素数を表示するように設定して、計算させてみると、fx-5800P はエラー、fx-9750GIII、fx-9860Gシリーズ ならびに fx-CGシリーズ は正しく計算結果を表示。fx-CP400 でも同様に複素指数関数を正しく計算する。
ComplexExponential 
 
 
積分の処理速度
 
積分計算速度の比較を試みる (Rad モード)。
機種積分1積分2
fx-JP9005.5秒48.7秒
fx-5800P10.1秒56.7秒
fx-9860GII (SH4A)1.5秒8.4秒
fx-CG201.0秒5.8秒
fx-CG500.7秒3.2秒
fx-CP4000.7秒2.0秒
積分の詳細はこちら

積分1については、最初に式が示される。次に近似値の1が表示される。[2021/07/03 修正]
Integral1_1  Integral1_2 

積分2については、0から1までの積分でもエラーにならず 1/2 が得られる。他の機種では数値積分区間を 0 から 1 にすると、0 において対数関数 In は無限小になり、数値計算では大きな誤差が発生するために結果が 0.4999 となる。そこで 0 の代わりに 1x10-10 を用いている。fx-CP400 では、積分区間 [0, 1] で計算できている。
Integral2 
 
 
周期関数の積分
積分計算にガウス・クロンロッド法が使われている可能性が考えられるので、このアルゴリズムが苦手な多項式で表せない関数の代表選手として周期関数の積分を行う。以下の計算で、n の値を大きくしてゆき、正しく計算できる限界を調べて見る (Rad モード)。

積分3
機種計算できる nタイムアウトエラーになる n
fx-JP900n ≦8n >9
fx-5800Pn ≦8n >9
fx-9860GIIn ≦ 60 Or (n = 64, 128, 256, 512)n ≧ 61 Or n = 2m (m≧10)
fx-CG20n ≦ 60 Or (n = 64, 128, 256, 512)n ≧ 61 Or n = 2m (m≧10)
fx-CG50n ≦ 60 Or (n = 64, 128, 256, 512)n ≧ 61 Or n = 2m (m≧10)
fx-CP400n ≦ 60 Or (n = 64, 128, 256, 512)n ≧ 61 Or n = 2m (m≧10)
(エラー表示せずに式を表示)
積分の詳細はこちら

fx-CP400 での結果は、計算可能な最大の n は 60 と、他のグラフ関数電卓と同じ結果になった。60π / -60π の代わりに nπ / -nπ とすると、解析的な解である 4n が得られずに、同じ式を表示することから、この積分では CAS 機能が働いていないと思われる。つまり、他のグラフ関数電卓と同様の数値積分のロジックが適用され、その数値積分の内部ロジック自体は大きく変わっていないようだ。但し、CAS電卓らしく、n が 61以上ではタイムアウトエラーにならずに、そのまま式を表示する。
Integral3_2  Integral3_1  Integral3_3 
 
 
時間のかかる積分

時間のかかる積分計算として、以下の計算を調べる。
Integral_! 
この積分は、radモードでも degモードでも同じ結果になるが、計算は rad モードで行う。
積分の詳細はこちら

モデル結果出力処理時間
 fx-115ES PLUS 2nd editionπ394.1
 fx-991ES Aπ395.1
 fx-991ES PLUS 2nd editionπ400.6
 fx-993ESπ411.8
 fx-995ESπ427.3
 fx-JP900π83.7
 fx-5800Pπ173.3
 fx-9750GIII (OS3.40)π14.5
 fx-CP400 (OS2.01.6)3.141592654733.7
 fx-CG50 (OS3.50)π9.2
※ 参考までに、Natural-VPAM 機能を搭載した fx-993ESfx-995ESfx-JP900、そしてプログラム関数電卓 fx-5800P、グラフ関数電卓 fx-9750GIIIfx-CG50 の結果も併記する。

fx-CP400 では、他の電卓に比べて処理速度が圧倒的に遅い。
[2021/06/01 修正]
さらに π と表示されずに 3.141592654 と表示される。答えとしてπ と表記されないことから、CAS機能による不定積分がうまく得られていない可能性が考えられる。


fx-CP400 搭載言語

新世代Casio Basic との代表的な違いについて調べた結果を以下に紹介する;
- 代入: (→ではない)
- 文字/文字列出力:Print (" "は使えない)
- プログラム最後に書かれた式/変数/文字列 が表示されない (表示には PrintMessage コマンドが必須)
- Locate の座標指定:テキストウィンドウでしか使えないのに、液晶のピクセル座標を使うので不便だ。
 文字表示の桁/行指定ができなくなった。これは明らかに改悪
- Text:グラフウィンドウでしか使えない。同じ位置に表示すると全て重なって表示される。問題なのはエスケープシーケンスが使えず、さらに色指定で白が使えないので、一度Text()で描画した文字列を消せない点にある
- GetkeyGetkey KKにキーコード取得 (戻り値を返さないので While Getkey / WhileEnd と書けない)
- 条件ジャンプ :無くなった。
 If 文を使う必要がある。さらに If / IfEnd 内からGotoで出るコードは禁止、エラーになることがある。
 この機能が使えるCasio Basicの柔軟性が否定された形。この点で Casio Basic との互換性がなくなる
 実態は Goto での if 文からの脱出を複数回使うとSyntaxエラーになるが、エラーが出なければ使えるレベル。
 仕様が中途半端でスタックエラーが発生しているかのように見える。
- Skip コマンド:新たに登場。Do, While, For でループ内冒頭にジャンプできる。これは明らかに改善
- カウントジャンプ Isz / Dsz:無くなった。
- テキストウィンドウとグラフ(グラフィックス)ウィンドウを同時に表示可能 (他の機種は画面切り替えが必要)
- ユーザー関数を自由に作れる
- サブルーチンは、引数を渡せて、戻り値を返せる

入力や出力は、基本的にウィンドウを使う。
全てのコマンド類を確認していないが、代表的(と思う)点について触れた。fx-5800P やグラフ関数電卓搭載のCasio Basicとの互換性は殆ど期待できず、全く別の言語として捉えるべきだ。仕様上はむしろ Casio Python (Pythonモード) に近い。但し、Casio Basic や Casio Pythonと比較すると、本プログラム言語は中途半端と言わざるを得ない。最大の問題は処理速度の遅さにある。本言語は発展途上と言うべきだが、Casio Pythonが登場した現在では、CASモデルのBasicのアップデートにカシオがリソースを割くとも思われず、今後の改善はあまり期待できないと思われる。


プログラム出力画面

テキストウィンドウ
テキストウィンドウにテキストを出力するには、Print コマンドを使う。CAS機能無しの他のグラフ関数電卓や fx-5800P では " " で出力すると内部カーソルが改行される。Print コマンドを使うと同様に内部カーソルが改行され、改行により表示位置が 20ピクセル下に下がる。

テキストウィンドウにテキストを出力するには、Locate コマンドも用意されている。CAS機能無しの他のグラフ関数電卓や fx-5800P では、テキスト文字の表示桁と表示行の位置を指定するが、fx-CP400 での表示位置はフォントの左上の位置をピクセル位置で指定する。Locate はテキストウィンドウへの出力専用で、グラフ(グラフィック)ウィンドウには出力できないのにピクセル座標での位置指定を要求するのは、なんとも理解できない謎仕様だ。

Locate でテキストウィンドウに何桁、何行出力できるのかを、次のコードを書いて調べた。
TextDisp_src1 TextDisp_src2 
Pauseコマンドは1つしか書いていないので、Pause コマンドが左と右の繋ぎ目になっている。

実行すると、テキストウィンドウは28桁(横)、10行で丁度収まる。
TextDisp1 TextDisp1_2 
左の画面で [OK] をタップすると、右の画面になり、右下に [▶] アイコンが現れる。これは Pause コマンドで一時停止している時に表示される。ここで、7つ並んでいるショートカットアイコンの中央にある Resize をタップするとテキストウィンドウが縦長に変化する。
ShortCut 

縦長になってから右下の [▶] をタップすると、引き続きテキストが下に出力される。
TextDisp2
 TextDisp3 
そして最後にコードに書いたメッセージが出力される。
TextDisp4 
リサイズされた縦長のテキストウィンドウは、テキスト21行で丁度収まることが分かる。
テキストウィンドウのサイズ -  桁 x 行
 - テキストウィンドウ28桁 x 10行
 - テキストウィンドウ28行 x 21行

なおウィンドウへの出力なので、上記の桁や行を超えると、スクロールバーが現れる。つまり桁や行の制限は無いわけだ。
TextDisp_scroll1  TextDisp_scroll3TextDisp_scroll2 TextDisp_scroll4 

グラフウィンドウ (グラフィックウィンドウ)
グラフウィンドウに出力できるピクセル範囲を、ピクセルを1ドットづつ塗りつぶすコードを書いて調べた。
GrphDisp_src 
チョット脱線するが、fx-CP400 では作成したコードを実行する際に、パラメータを指定することができる。上のコードでは塗りつぶし開始ピクセルの位置を座標 (a, b) としていて、実行時にパラメータ ab を指定するようにしている。

2つのパラメータともに 1 を指定して、このコードを実行する。
GrphDisp_1 
横 309 ドット、縦 185ドットを塗りつぶすと、グラフウィンドウがちょうど塗りつぶされることが確認できた。塗りつぶした結果をよく見ると、上端と左端がともに1ドット塗りつぶされてない。PxlOn コマンドで指定する座標は、x座標は1以上、y座標も1以上を指定する仕様だ。一方 Plot コマンドで表示されるカーソル表示には、上端と左端のピクセルが使われる。このあたりは他のグラフ関数電卓と同じ仕様になっているのは興味深い。

さて、Pause コマンドを使っているので、右下に [▶] アイコンが表示されプログラムが一時停止されている。
ここで、ショートカットアイコンで Resize をタップすると、グラフウィンドウが縦長に広くなる。
ShortCut 
そして [▶] をタップすると、塗りつぶしが再開され、塗りつぶしが継続する。
GrphDisp_2 
縦 400ドットまで塗りつぶすと、縦長のグラフウィンドウにちょうど収まることが分かった。

グラフウィンドウのピクセル数 - (x, y)
 - グラフウィンドウ:ウィンドウサイズ(310, 186)、出力範囲(309, 185)
 - グラフウィンドウ:ウィンドウサイズ(310, 401)、出力範囲(309, 400)


グラフウィンドウへの出力は、範囲を超えてもスクロールバーが現れない点が、テキストウィンドウと異なる。


fx-CP400 のベンチマーク

以下、実際にプログラムを作成、実行した結果を紹介してゆく。

数値演算

先ずは、四則演算や関数計算を行うプログラムの処理速度を調べる。これまでに記事にした機種で共通して使えるコマンドを出来るだけ用いて、同じアルゴリズムで書いた「加算プログラム」と「数値積分プログラム」の実行速度比較を比較する。

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

fx-CP400 のプログラム
AddTest_Goto_src AddTest_For_src 
GotoIf を使う例と For を使う例の2通りで処理速度を調べることにする。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

fx-CP400 のプログラム
FuncTest_Goto_src FuncTest_For_src 
GotoIf を使う例と For を使う例の2通りで処理速度を調べることにする。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す;
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800P
A=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2 秒5.8 倍109.4 秒11.5 秒
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒 8.8 倍
fx-CP400Goto & If18.2 秒6.8 倍39.2 秒32.2 倍
For12.6 秒9.8 倍33.0 秒38.2 倍
fx-CG50
Goto3.9 秒31.6 倍8.2 秒153.9 倍
For2.3 秒53.5 倍6.3 秒200.3 倍

記念すべき FX-502P を基準に、処理速度が何倍になっているのかも示している。
fx-7000G から上の機種 (いずれも1980年台の製品) と比べると、四則演算は速く、関数処理はさらに速い結果になった。
但し、高精細カラー液晶を搭載した fx-CG50 に比べると、圧倒的に処理が遅い


グラフィック描画

グラフィックプログラム例

fx-7000G で実施したドット塗り潰しのコードは下記になる。
fx7000G_Dot  

同じ動作を fx-CP400 で書くと下記になる。fx-7000G には For 文が無いが、fx-CP400 では For 文を使うことにする。
DotTest_src_CP40

これを実行すると以下のようになる。
DotTest_result_CP400

描画には 327.5秒 (5分27.5秒) 要した。

fx-7000G 以降のグラフ関数電卓でも上記のアルゴリズムがそのまま走る。ところで2001年以降に発売されたグラフ関数電卓に搭載されている言語の中では fx-9860G が最もグラフィックス描画が速いのだが、それでも同じアルゴリズムの実行に 260秒程度かかる。ところが、1985年発売の世界初グラフ関数電卓 fx-7000G よりも遅い。fx-CP400 のグラフィック描画は、非常に遅いと言える。


テキスト描画

ピタゴラス数の計算プログラム。
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。

Pytha_cp400_src1 Pytha_cp400_src2

これを実行すると、以下のような画面が得られる。
Pyha_cp400_1 Pytha_cp400_2


PYTHA
CFX-9850G165.6 秒---
CFX-9850GC PLUS267.7 秒0.62 倍
fx-9860G3.87 倍115.4 秒1.44 倍
OS 1.03115.8 秒1.43 倍
OS 1.04115.8 秒1.43 倍
OS 1.05115.9 秒1.43 倍
OS 2.01128.7 秒1.29 倍
fx-5800P---206.6 秒0.56 倍
fx-9750GIIIOS 3.4054.4 秒2.12 倍
fx-CG400OS 2.01.6512.0 秒0.23 倍
fx-CG50OS 3.5082.4 秒1.40 倍

いつくかのグラフ関数電卓での速度も合わせて示し、GetkeyLocate を最初に搭載した CFX-9860G を基準にして処理速度の比率も合わせて示した。fx-CP400 は恐ろしく遅いことが判る。


プログラム電卓の系譜

カシオグラフ関数電卓では、初めて高精細カラー液晶を搭載したカラーグラフ関数電卓 fx-CG10 Prizm が 北米で発売されたのが 2011年、同じものが北米以外で fx-CG20 と名前を変えて発売されたのが 2012年であった。これらのモデルには、新世代Casio Basicが搭載されていた。同時に発売されていたモノクロ液晶モデル fx-9860GII にも、ほぼ同じ仕様の 新世代Casio Basic が搭載されていた。そして、カラー液晶モデルは画面出力が極めて遅いという難点があった。 

翌年の 2013年に、カラーCASグラフ関数電卓 fx-CP400 が発売され、これには 新世代Casio Basic とは全く異なる Casio 仕様の構造化Basic が搭載された。このモデルに搭載されている構造化Basicは、構造制御のスタックが少なく使いづい上に、動作が異常に遅いといった、実用性に欠けるものだと言わざるを得ない

5年後の 2018年には、カラーグラフ関数電卓の新しいモデル fx-CG50 が発売され、新世代Casio Basicの動作速度、特に画面出力速度が大きく向上した。さらに、2020年には OSアップデートにより fx-CG50Pythonモードが追加された。

この Casio Python は画面出力を含めて、動作が劇的に速くなった (グラフィック出力は100倍以上向上)。Casio Python の仕様は、電卓への組込 microPythonに近いもので、PC向けの一般的な Python (CPython) の大幅なサブセット版になっており、実用プログラムを作るだけの機能はまだ搭載されておらず、まだ発展途上だと言える。

但し、プログラム電卓の搭載言語に Casio Python が加わったことは、大きな変化点と言える。一方で、fx-CP400fx-CG500 搭載の "発展途上" と言える構造化Basic は、主にその処理速度の遅さから、実用プログラムを作るには全く向いていない。そして Casio 仕様の構造化Basic のアップデートに今後カシオがリソースをつぎ込むとは考えにくい。これらのモデルはプログラミングを楽しむには全く向いていない。現在のところで言えば、構造化Basic を搭載することで搭載言語の進化を試みたが、その深化を試みる機会を失ったのが fx-CP400 (fx-CG500) の位置だと考えられる。




温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G 
温故知新 - CFX-9860G
温故知新 - CFX-9850GC PLUS
温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-9860GII
温故知新 - fx-CG10/ fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII
温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみる
温故知新:番外編 - 電卓評価用の複素数を解いてみた





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、fx-CP400

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic, C.Basic そして Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR