温故知新 - fx-CP400
プログラム電卓 温故知新
- 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
2021/05/16
修正 2021/06/01
追記 2023/10/15
過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする企画。
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)
これを実行すると、以下のような画面が得られる。
いつくかのグラフ関数電卓での速度も合わせて示し、Getkey と Locate を最初に搭載した 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-CG50に Pythonモードが追加された。
この Casio Python は画面出力を含めて、動作が劇的に速くなった (グラフィック出力は100倍以上向上)。Casio Python の仕様は、電卓への組込 microPythonに近いもので、PC向けの一般的な Python (CPython) の大幅なサブセット版になっており、実用プログラムを作るだけの機能はまだ搭載されておらず、まだ発展途上だと言える。
但し、プログラム電卓の搭載言語に Casio Python が加わったことは、大きな変化点と言える。一方で、fx-CP400 や fx-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
温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみる
温故知新:番外編 - 電卓評価用の複素数を解いてみた
応援クリックをお願いします。励みになるので...
keywords: プログラム関数電卓、プログラミング、Casio Basic、fx-CP400
リンク集 | ブログ内マップ
- 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
2021/05/16
修正 2021/06/01
追記 2023/10/15
過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする企画。
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)
抵抗膜方式のタッチパネルにテンキーも備えた携帯端末であり、電卓と言うよりもタブレットに近い。
▶主なハードウェア仕様
- 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 との比較画像を見ると全く同じデザインだと分かると思う。
左から、fx-260 Solar II、fx-JP900、fx-CG50、fx-CP400
左の画像:筐体裏側、右の画像:ハードケース
fx-CP400 (左側)、fx-CG50 (右側) のキーボード周り - ほぼ同じデザインだと分かる
また、ClassPad のロゴがさりげなく入っている。
▍OSアップデート - Ver2.01.7 ⇒ Ver 2.01.7002 [2023/10/15 追記]
2023/04/05 に Ver 2.01.7002 へのアップデートが公開された。
以下からアップデートファイルを入手できる;
CASIO WORLDWIDE EDUCATION WEBSITE - DOWNLOADS
実際にダウンロードできるページに進んでみると、ダウンロードできるOSのバージョンが Ver 2.01.7 と表記されており、一見 2.01.7 からアップデートするとしても同じバージョンに見える。しかし実際には 2.01.7002 と細かくアップデートされている。
同じOSバージョンだとアップデート作業中に "同じバージョンなのでアップデートしない" といったメッセージが表示されてアップデートが中断される。今回はアップデートされたことから、2.01.7 から 2.01.7002 へ無事にアップデートされたことがわかる。
アップデートされた細かい点は、まだ分かっていない。何かわかったら追記する予定だ。
▍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-CP400 や fx-CG500 はCAS機能にその価値を見いだすことになろう。ClassPadは、学校教育向けに開発され最適化されてきた製品なので、一般的な技術者向けに最適化されていないのは、当然と言える。
なお、関数入力をソフトウェアキーボードから行うしかないので、関数電卓としては使い勝手が非常に悪い。
⇒ 温故知新:番外編 - 関数電卓としての使い勝手
▍演算精度 (桁落ち)
123456789123456 - 123456789123411 = 45
となる筈だが、fx-5800P と fx-CG50 でこの減算を行うと、答えが 0 になる。 内部演算精度15桁ギリギリのところで最下位2桁の桁落ちが発生している。一方、fx-CP400 でこの計算を実行すると答えが 45 と正しく得られる。
▍演算桁数(指数部)
449! = 3851930518E+997
fx-CP400 は指数部が3桁、±999 だから、演算桁数が1000桁ある。他のグラフ関数電卓やプログラム関数電卓では、指数部は2桁なので 100桁以内の桁数となる。
積分計算速度の比較を試みる (Rad モード)。
▍グラフウィンドウ (グラフィックウィンドウ)
グラフウィンドウに出力できるピクセル範囲を、ピクセルを1ドットづつ塗りつぶすコードを書いて調べた。
チョット脱線するが、fx-CP400 では作成したコードを実行する際に、パラメータを指定することができる。上のコードでは塗りつぶし開始ピクセルの位置を座標 (a, b) としていて、実行時にパラメータ a と b を指定するようにしている。
2つのパラメータともに 1 を指定して、このコードを実行する。
横 309 ドット、縦 185ドットを塗りつぶすと、グラフウィンドウがちょうど塗りつぶされることが確認できた。塗りつぶした結果をよく見ると、上端と左端がともに1ドット塗りつぶされてない。PxlOn コマンドで指定する座標は、x座標は1以上、y座標も1以上を指定する仕様だ。一方 Plot コマンドで表示されるカーソル表示には、上端と左端のピクセルが使われる。このあたりは他のグラフ関数電卓と同じ仕様になっているのは興味深い。
さて、Pause コマンドを使っているので、右下に [▶] アイコンが表示されプログラムが一時停止されている。
ここで、ショートカットアイコンで Resize をタップすると、グラフウィンドウが縦長に広くなる。
そして [▶] をタップすると、塗りつぶしが再開され、塗りつぶしが継続する。
縦 400ドットまで塗りつぶすと、縦長のグラフウィンドウにちょうど収まることが分かった。
※グラフウィンドウのピクセル数 - (x, y)
- グラフウィンドウ小:ウィンドウサイズ(310, 186)、出力範囲(309, 185)
- グラフウィンドウ大:ウィンドウサイズ(310, 401)、出力範囲(309, 400)
グラフウィンドウへの出力は、範囲を超えてもスクロールバーが現れない点が、テキストウィンドウと異なる。
▋fx-CP400 のベンチマーク
以下、実際にプログラムを作成、実行した結果を紹介してゆく。
▍数値演算
先ずは、四則演算や関数計算を行うプログラムの処理速度を調べる。これまでに記事にした機種で共通して使えるコマンドを出来るだけ用いて、同じアルゴリズムで書いた「加算プログラム」と「数値積分プログラム」の実行速度比較を比較する。
▶加算プログラム
プログラムを起動し、N に 1000 を入力して実行時間を計る。
fx-CP400 のプログラム
Goto と If を使う例と For を使う例の2通りで処理速度を調べることにする。
▶数値積分プログラム
この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。
プログラム起動し、分割数として 1000 を入力して、時効時間を計る。
fx-CP400 のプログラム
Goto と If を使う例と For を使う例の2通りで処理速度を調べることにする。
以前調べた結果と併せて、上記の計算速度のを比較結果を示す;
記念すべき FX-502P を基準に、処理速度が何倍になっているのかも示している。
fx-7000G から上の機種 (いずれも1980年台の製品) と比べると、四則演算は速く、関数処理はさらに速い結果になった。
但し、高精細カラー液晶を搭載した fx-CG50 に比べると、圧倒的に処理が遅い。
▍グラフィック描画
▍グラフィックプログラム例
fx-7000G で実施したドット塗り潰しのコードは下記になる。
同じ動作を fx-CP400 で書くと下記になる。fx-7000G には For 文が無いが、fx-CP400 では For 文を使うことにする。
これを実行すると以下のようになる。
描画には 327.5秒 (5分27.5秒) 要した。
fx-7000G 以降のグラフ関数電卓でも上記のアルゴリズムがそのまま走る。ところで2001年以降に発売されたグラフ関数電卓に搭載されている言語の中では fx-9860G が最もグラフィックス描画が速いのだが、それでも同じアルゴリズムの実行に 260秒程度かかる。ところが、1985年発売の世界初グラフ関数電卓 fx-7000G よりも遅い。fx-CP400 のグラフィック描画は、非常に遅いと言える。
▍テキスト描画
ピタゴラス数の計算プログラム。
⇒ プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。
▶主なハードウェア仕様
- 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 との比較画像を見ると全く同じデザインだと分かると思う。
左から、fx-260 Solar II、fx-JP900、fx-CG50、fx-CP400
左の画像:筐体裏側、右の画像:ハードケース
fx-CP400 (左側)、fx-CG50 (右側) のキーボード周り - ほぼ同じデザインだと分かる
また、ClassPad のロゴがさりげなく入っている。
▍OSアップデート - Ver2.01.7 ⇒ Ver 2.01.7002 [2023/10/15 追記]
2023/04/05 に Ver 2.01.7002 へのアップデートが公開された。
以下からアップデートファイルを入手できる;
CASIO WORLDWIDE EDUCATION WEBSITE - DOWNLOADS
実際にダウンロードできるページに進んでみると、ダウンロードできるOSのバージョンが Ver 2.01.7 と表記されており、一見 2.01.7 からアップデートするとしても同じバージョンに見える。しかし実際には 2.01.7002 と細かくアップデートされている。
同じOSバージョンだとアップデート作業中に "同じバージョンなのでアップデートしない" といったメッセージが表示されてアップデートが中断される。今回はアップデートされたことから、2.01.7 から 2.01.7002 へ無事にアップデートされたことがわかる。
アップデートされた細かい点は、まだ分かっていない。何かわかったら追記する予定だ。
▍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-CP400 や fx-CG500 はCAS機能にその価値を見いだすことになろう。ClassPadは、学校教育向けに開発され最適化されてきた製品なので、一般的な技術者向けに最適化されていないのは、当然と言える。
なお、関数入力をソフトウェアキーボードから行うしかないので、関数電卓としては使い勝手が非常に悪い。
⇒ 温故知新:番外編 - 関数電卓としての使い勝手
▍演算精度 (桁落ち)
123456789123456 - 123456789123411 = 45
となる筈だが、fx-5800P と fx-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 でも同様に複素指数関数を正しく計算する。
複素数を表示するように設定して、計算させてみると、fx-5800P はエラー、fx-9750GIII、fx-9860Gシリーズ ならびに fx-CGシリーズ は正しく計算結果を表示。fx-CP400 でも同様に複素指数関数を正しく計算する。
▍積分の処理速度
積分計算速度の比較を試みる (Rad モード)。
機種 | ||
fx-JP900 | 5.5秒 | 48.7秒 |
fx-5800P | 10.1秒 | 56.7秒 |
fx-9860GII (SH4A) | 1.5秒 | 8.4秒 |
fx-CG20 | 1.0秒 | 5.8秒 |
fx-CG50 | 0.7秒 | 3.2秒 |
fx-CP400 | 0.7秒 | 2.0秒 |
※ 積分の詳細はこちら
積分1については、最初に式が示される。次に近似値の1が表示される。[2021/07/03 修正]
積分2については、0から1までの積分でもエラーにならず 1/2 が得られる。他の機種では数値積分区間を 0 から 1 にすると、0 において対数関数 In x は無限小になり、数値計算では大きな誤差が発生するために結果が 0.4999 となる。そこで 0 の代わりに 1x10-10 を用いている。fx-CP400 では、積分区間 [0, 1] で計算できている。
積分1については、最初に式が示される。次に近似値の1が表示される。[2021/07/03 修正]
積分2については、0から1までの積分でもエラーにならず 1/2 が得られる。他の機種では数値積分区間を 0 から 1 にすると、0 において対数関数 In x は無限小になり、数値計算では大きな誤差が発生するために結果が 0.4999 となる。そこで 0 の代わりに 1x10-10 を用いている。fx-CP400 では、積分区間 [0, 1] で計算できている。
▍周期関数の積分
積分計算にガウス・クロンロッド法が使われている可能性が考えられるので、このアルゴリズムが苦手な多項式で表せない関数の代表選手として周期関数の積分を行う。以下の計算で、n の値を大きくしてゆき、正しく計算できる限界を調べて見る (Rad モード)。
機種 | 計算できる n | タイムアウトエラーになる n |
fx-JP900 | n ≦8 | n >9 |
fx-5800P | n ≦8 | n >9 |
fx-9860GII | n ≦ 60 Or (n = 64, 128, 256, 512) | n ≧ 61 Or n = 2m (m≧10) |
fx-CG20 | n ≦ 60 Or (n = 64, 128, 256, 512) | n ≧ 61 Or n = 2m (m≧10) |
fx-CG50 | n ≦ 60 Or (n = 64, 128, 256, 512) | n ≧ 61 Or n = 2m (m≧10) |
fx-CP400 | n ≦ 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以上ではタイムアウトエラーにならずに、そのまま式を表示する。
▍時間のかかる積分
時間のかかる積分計算として、以下の計算を調べる。
この積分は、radモードでも degモードでも同じ結果になるが、計算は rad モードで行う。
※ 積分の詳細はこちら
※ 参考までに、Natural-VPAM 機能を搭載した fx-993ES、fx-995ES、fx-JP900、そしてプログラム関数電卓 fx-5800P、グラフ関数電卓 fx-9750GIII、fx-CG50 の結果も併記する。
fx-CP400 では、他の電卓に比べて処理速度が圧倒的に遅い。
[2021/06/01 修正]
さらに π と表示されずに 3.141592654 と表示される。答えとしてπ と表記されないことから、CAS機能による不定積分がうまく得られていない可能性が考えられる。
▋fx-CP400 搭載言語
新世代Casio Basic との代表的な違いについて調べた結果を以下に紹介する;
- 代入:⇒ (→ではない)
- 文字/文字列出力:Print (" "は使えない)
- プログラム最後に書かれた式/変数/文字列 が表示されない (表示には Print や Message コマンドが必須)
- Locate の座標指定:テキストウィンドウでしか使えないのに、液晶のピクセル座標を使うので不便だ。
文字表示の桁/行指定ができなくなった。これは明らかに改悪。
- Text:グラフウィンドウでしか使えない。同じ位置に表示すると全て重なって表示される。問題なのはエスケープシーケンスが使えず、さらに色指定で白が使えないので、一度Text()で描画した文字列を消せない点にある。
- Getkey:Getkey K で Kにキーコード取得 (戻り値を返さないので 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 でテキストウィンドウに何桁、何行出力できるのかを、次のコードを書いて調べた。
Pauseコマンドは1つしか書いていないので、Pause コマンドが左と右の繋ぎ目になっている。
実行すると、テキストウィンドウは28桁(横)、10行で丁度収まる。
左の画面で [OK] をタップすると、右の画面になり、右下に [▶] アイコンが現れる。これは Pause コマンドで一時停止している時に表示される。ここで、7つ並んでいるショートカットアイコンの中央にある Resize をタップするとテキストウィンドウが縦長に変化する。
縦長になってから右下の [▶] をタップすると、引き続きテキストが下に出力される。
そして最後にコードに書いたメッセージが出力される。
リサイズされた縦長のテキストウィンドウは、テキスト21行で丁度収まることが分かる。
※テキストウィンドウのサイズ - 桁 x 行
- テキストウィンドウ小:28桁 x 10行
- テキストウィンドウ大:28行 x 21行
なおウィンドウへの出力なので、上記の桁や行を超えると、スクロールバーが現れる。つまり桁や行の制限は無いわけだ。
fx-CP400 での結果は、計算可能な最大の n は 60 と、他のグラフ関数電卓と同じ結果になった。60π / -60π の代わりに nπ / -nπ とすると、解析的な解である 4n が得られずに、同じ式を表示することから、この積分では CAS 機能が働いていないと思われる。つまり、他のグラフ関数電卓と同様の数値積分のロジックが適用され、その数値積分の内部ロジック自体は大きく変わっていないようだ。但し、CAS電卓らしく、n が 61以上ではタイムアウトエラーにならずに、そのまま式を表示する。
▍時間のかかる積分
時間のかかる積分計算として、以下の計算を調べる。
この積分は、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.141592654 | 733.7 秒 |
fx-CG50 (OS3.50) | π | 9.2 秒 |
fx-CP400 では、他の電卓に比べて処理速度が圧倒的に遅い。
[2021/06/01 修正]
さらに π と表示されずに 3.141592654 と表示される。答えとしてπ と表記されないことから、CAS機能による不定積分がうまく得られていない可能性が考えられる。
▋fx-CP400 搭載言語
新世代Casio Basic との代表的な違いについて調べた結果を以下に紹介する;
- 代入:⇒ (→ではない)
- 文字/文字列出力:Print (" "は使えない)
- プログラム最後に書かれた式/変数/文字列 が表示されない (表示には Print や Message コマンドが必須)
- Locate の座標指定:テキストウィンドウでしか使えないのに、液晶のピクセル座標を使うので不便だ。
文字表示の桁/行指定ができなくなった。これは明らかに改悪。
- Text:グラフウィンドウでしか使えない。同じ位置に表示すると全て重なって表示される。問題なのはエスケープシーケンスが使えず、さらに色指定で白が使えないので、一度Text()で描画した文字列を消せない点にある。
- Getkey:Getkey K で Kにキーコード取得 (戻り値を返さないので 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 でテキストウィンドウに何桁、何行出力できるのかを、次のコードを書いて調べた。
Pauseコマンドは1つしか書いていないので、Pause コマンドが左と右の繋ぎ目になっている。
実行すると、テキストウィンドウは28桁(横)、10行で丁度収まる。
左の画面で [OK] をタップすると、右の画面になり、右下に [▶] アイコンが現れる。これは Pause コマンドで一時停止している時に表示される。ここで、7つ並んでいるショートカットアイコンの中央にある Resize をタップするとテキストウィンドウが縦長に変化する。
縦長になってから右下の [▶] をタップすると、引き続きテキストが下に出力される。
そして最後にコードに書いたメッセージが出力される。
リサイズされた縦長のテキストウィンドウは、テキスト21行で丁度収まることが分かる。
※テキストウィンドウのサイズ - 桁 x 行
- テキストウィンドウ小:28桁 x 10行
- テキストウィンドウ大:28行 x 21行
なおウィンドウへの出力なので、上記の桁や行を超えると、スクロールバーが現れる。つまり桁や行の制限は無いわけだ。
▍グラフウィンドウ (グラフィックウィンドウ)
グラフウィンドウに出力できるピクセル範囲を、ピクセルを1ドットづつ塗りつぶすコードを書いて調べた。
チョット脱線するが、fx-CP400 では作成したコードを実行する際に、パラメータを指定することができる。上のコードでは塗りつぶし開始ピクセルの位置を座標 (a, b) としていて、実行時にパラメータ a と b を指定するようにしている。
2つのパラメータともに 1 を指定して、このコードを実行する。
横 309 ドット、縦 185ドットを塗りつぶすと、グラフウィンドウがちょうど塗りつぶされることが確認できた。塗りつぶした結果をよく見ると、上端と左端がともに1ドット塗りつぶされてない。PxlOn コマンドで指定する座標は、x座標は1以上、y座標も1以上を指定する仕様だ。一方 Plot コマンドで表示されるカーソル表示には、上端と左端のピクセルが使われる。このあたりは他のグラフ関数電卓と同じ仕様になっているのは興味深い。
さて、Pause コマンドを使っているので、右下に [▶] アイコンが表示されプログラムが一時停止されている。
ここで、ショートカットアイコンで Resize をタップすると、グラフウィンドウが縦長に広くなる。
そして [▶] をタップすると、塗りつぶしが再開され、塗りつぶしが継続する。
縦 400ドットまで塗りつぶすと、縦長のグラフウィンドウにちょうど収まることが分かった。
※グラフウィンドウのピクセル数 - (x, y)
- グラフウィンドウ小:ウィンドウサイズ(310, 186)、出力範囲(309, 185)
- グラフウィンドウ大:ウィンドウサイズ(310, 401)、出力範囲(309, 400)
グラフウィンドウへの出力は、範囲を超えてもスクロールバーが現れない点が、テキストウィンドウと異なる。
▋fx-CP400 のベンチマーク
以下、実際にプログラムを作成、実行した結果を紹介してゆく。
▍数値演算
先ずは、四則演算や関数計算を行うプログラムの処理速度を調べる。これまでに記事にした機種で共通して使えるコマンドを出来るだけ用いて、同じアルゴリズムで書いた「加算プログラム」と「数値積分プログラム」の実行速度比較を比較する。
▶加算プログラム
プログラムを起動し、N に 1000 を入力して実行時間を計る。
fx-CP400 のプログラム
Goto と If を使う例と For を使う例の2通りで処理速度を調べることにする。
▶数値積分プログラム
この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。
プログラム起動し、分割数として 1000 を入力して、時効時間を計る。
fx-CP400 のプログラム
Goto と If を使う例と For を使う例の2通りで処理速度を調べることにする。
以前調べた結果と併せて、上記の計算速度のを比較結果を示す;
加算プログラム | 数値積分プログラム | ||||
機種 | 実行時間 | 比較 | 実行時間 (秒) | 比較 | |
FX-502P | 123.1 秒 | --- | 1261.8 秒 | --- | |
FX-602P | 111.2 秒 | 1.1 倍 | 716.5 秒 | 1.8 倍 | |
FX-603P | 37.8 秒 | 3.3 倍 | 166.2 秒 | 7.6 倍 | |
fx-4000P | 61.7 秒 | 2.0 倍 | 349.1秒 | 3.6 倍 | |
fx-4500P | 195.0 秒 | 0.6 倍 | 798.1 秒 | 1.6 倍 | |
fx-4800P | A=A+1 | 26.3 秒 | 4.7 倍 | 114.3 秒 | 11.0 倍 |
Isz A | 21.2 秒 | 5.8 倍 | 109.4 秒 | 11.5 秒 | |
fx-7000G | A=A+1 | 20.7 秒 | 5.9 倍 | 146.1 秒 | 8.6 倍 |
Isz A | 19.3 秒 | 6.4 倍 | 143.2 秒 | 8.8 倍 | |
fx-CP400 | Goto & If | 18.2 秒 | 6.8 倍 | 39.2 秒 | 32.2 倍 |
For | 12.6 秒 | 9.8 倍 | 33.0 秒 | 38.2 倍 | |
fx-CG50 | Goto | 3.9 秒 | 31.6 倍 | 8.2 秒 | 153.9 倍 |
For | 2.3 秒 | 53.5 倍 | 6.3 秒 | 200.3 倍 |
記念すべき FX-502P を基準に、処理速度が何倍になっているのかも示している。
fx-7000G から上の機種 (いずれも1980年台の製品) と比べると、四則演算は速く、関数処理はさらに速い結果になった。
但し、高精細カラー液晶を搭載した fx-CG50 に比べると、圧倒的に処理が遅い。
▍グラフィック描画
▍グラフィックプログラム例
fx-7000G で実施したドット塗り潰しのコードは下記になる。
同じ動作を fx-CP400 で書くと下記になる。fx-7000G には For 文が無いが、fx-CP400 では For 文を使うことにする。
これを実行すると以下のようになる。
描画には 327.5秒 (5分27.5秒) 要した。
fx-7000G 以降のグラフ関数電卓でも上記のアルゴリズムがそのまま走る。ところで2001年以降に発売されたグラフ関数電卓に搭載されている言語の中では fx-9860G が最もグラフィックス描画が速いのだが、それでも同じアルゴリズムの実行に 260秒程度かかる。ところが、1985年発売の世界初グラフ関数電卓 fx-7000G よりも遅い。fx-CP400 のグラフィック描画は、非常に遅いと言える。
▍テキスト描画
ピタゴラス数の計算プログラム。
⇒ プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。
これを実行すると、以下のような画面が得られる。
PYTHA | |||
CFX-9850G | 165.6 秒 | --- | |
CFX-9850GC PLUS | 267.7 秒 | 0.62 倍 | |
fx-9860G | 3.87 倍 | 115.4 秒 | 1.44 倍 |
OS 1.03 | 115.8 秒 | 1.43 倍 | |
OS 1.04 | 115.8 秒 | 1.43 倍 | |
OS 1.05 | 115.9 秒 | 1.43 倍 | |
OS 2.01 | 128.7 秒 | 1.29 倍 | |
fx-5800P | --- | 206.6 秒 | 0.56 倍 |
fx-9750GIII | OS 3.40 | 54.4 秒 | 2.12 倍 |
fx-CG400 | OS 2.01.6 | 512.0 秒 | 0.23 倍 |
fx-CG50 | OS 3.50 | 82.4 秒 | 1.40 倍 |
いつくかのグラフ関数電卓での速度も合わせて示し、Getkey と Locate を最初に搭載した 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-CG50に Pythonモードが追加された。
この Casio Python は画面出力を含めて、動作が劇的に速くなった (グラフィック出力は100倍以上向上)。Casio Python の仕様は、電卓への組込 microPythonに近いもので、PC向けの一般的な Python (CPython) の大幅なサブセット版になっており、実用プログラムを作るだけの機能はまだ搭載されておらず、まだ発展途上だと言える。
但し、プログラム電卓の搭載言語に Casio Python が加わったことは、大きな変化点と言える。一方で、fx-CP400 や fx-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
温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみる
温故知新:番外編 - 電卓評価用の複素数を解いてみた
応援クリックをお願いします。励みになるので...
keywords: プログラム関数電卓、プログラミング、Casio Basic、fx-CP400
リンク集 | ブログ内マップ
- 関連記事
-
- 温故知新 - fx-CP400 2023/10/15
- 温故知新 - fx-4000P / fx-4500P / fx-4800P 2021/09/27
- 温故知新:番外編 - 電卓評価用の複素数を解いてみた 2021/09/07
- プログラム電卓 温故知新 - 目次 2021/08/15
- 温故知新 - fx-CG10 / fx-CG20 2021/08/15