fx-CG50をレビュー

## はじめに
こんにちは、今度は我らがCASIOのグラフ電卓を購入してみました。元々はfx-9750GIIIの輸入品を買ってみようかなと思っていたのですが、どうやらfx-CG100が出るらしいので、日本の中でのfx-CG50の流通量が減る前に買っておこうと思って買いました。ちなみに、買ったのは並行輸入品です(正規流通品は高い…)。ギリギリ高くなる前で、16000円くらいで買えたと思います(数日後見たら20000円を超え…w)

https://amzn.to/4k35EP5

## fx-CG50とは
CASIOのグラフ電卓で、日本で正規流通しているものだとこの機種が最上位です。2017年発売と、かなり新参の機種ですが、他のメーカーのような突出した機能など(タッチパネル、CAS、リチウムイオン電池など)はありませんが、必要な機能を必要なだけ揃え、堅実かつバグの少ないものです。fx-CG10/20シリーズに引き続くPRIZM(プリズム)シリーズで、後継のfx-CG100はClassWiz CGシリーズなので、悲しきかな(？)

乾電池で動作するため、他のグラフ電卓より駆動時間が長いのは魅力だと思います(比較程度に、所有しているHP Prime G2は満充電でも10~15時間程度が限界です)。

## スペック
| 項目 | 詳細 |
|-:|:-|
| CPU | SH-4A(100MHz程度?) |
| RAM | 2MB(うちユーザーエリア61000Byte) |
| ROM | 16MB |
| 画面 | 384×216画素　フルカラー液晶 |
| キー数 | 50 |
| 電源 | 単4電池×4 |
| プログラミング言語 | Basic-Like/MicroPython(OS 3.20~) |

アーキテクチャが違えば電源も違うので性能も全く異なりますが、CPUだけで見ればSwissMicros DM42sやTI-nSPIRE CXの性能と近かったりします。このCPUはRisc系のもので、最大周波数は600MHzくらいと、かなり高性能なようです。調べてみたところ、このCPUが含まれるSuperHシリーズはSE◯AのDream Castにも採用されたシリーズらしいので、そこそこ高性能な雰囲気がします。まぁその性能をフルに発揮しようと思ったらRAMを強化しないといけないので、非現実的ですけどねﾊﾊﾊ() というかDream Castの時代のCPUがどこまでのメモリ容量に対応しているかは不明ですね。

ちなみにHP Prime G2はそもそも性能が吹っ飛んでいるので、比較はしたらダメですね。

## First Impression
一応、多少のレビューをしておきます。

まず、サイズが非常に大きいです。というよりかはHP Primeが性能に対してコンパクトすぎるだけなのですが、それと比べてしまうと流石に大きく感じてしまいます。あと、電源が単4電池(AAA形)なので電池ボックス分で分厚くなります。

画像を見たら早いと思います。
![IMG_0113.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/0918a752-22fe-1064-da9f-9b05d97efc04.jpeg)
右が今回のfx-CG50で、左が[以前レビューしたfx-JP900](https://qiita.com/bockring/items/02d3052ccb6f541a433e)です。

私は制服の内ポケットに関数電卓を忍ばせているのですが、この機種は大きく重いので忍ばせるには向かなさそうです。カバンの中にでも忍ばせておきましょう。(ちなみに、HP Primeは結構ジャストフィットです)

本体のデザインも価格相応の高級感があり、メタリック調のキー(F1~F6･カーソルキー)やカーボン風の彫り込み、アクセントカラーとしての青(外周)など、手に持って**所有欲が満たされる**ものでした。

操作感と画面についても述べておきます。画面表示は明朝体(ゴシック体が良かった…というのは理解した上で購入しています)で、下1行のファンクションメニューと、メインメニューの項目のみゴシックで表示されます。まぁGUIについてはHP Primeの勝利なのですが、画面サイズが重要です。fx-CG50はHP Primeよりも横長の画面なので、ファンクションメニュー内の文字が小さくても潰れることなく、ピクセル感も無く自然に表示できています。この点は非常に評価が高いです。あと、ディスプレイの制御もCASIOの方が良さそうで、画面のチラつきを感じません。(HP Primeは若干チラつきます)

操作は、カーソルキーでも可能ですが、カーソルキー以外のキーと、**特にファンクションキー(F1~F6)を多用**します。この操作感がこの電卓を古い操作性だと感じさせているような気はします。

そしてキーについてですが、同世代のfx-JPシリーズ(私はfx-JP900を所有しています)と比べると軽快なクリック感で、非常に押しやすいと思います。fx-JP900はキーのクリックが絶妙に重たく、押していて感触も気持ちの良いものではなかったので嬉しい変化です。

~~逆に軽すぎて押したのに反応しないということも稀に見られました。もちろん私の押下圧が足りないだけかもしれませんが。~~ 私の押下圧が足りないだけでした。

また、私は使わないであろう3ピンシリアルケーブルについては終端部付近にノイズ軽減用のフェライトコアか取り付けられており、端子は金メッキが施されていて、品質は良さそうです。

## プログラミング…の前に。
順当に行けばこの章はプログラム機能について紹介しますが、一旦別のことをします。その1つは**アップデート**で、もう1つは**CASアドインをインストール**します。

### OSアップデート
OSのアップデートはCASIO公式サイトで配布されているインストーラー(Windows/Mac)を起動し、指示に従って操作すれば終わりです。何せアップデートなので、多少の時間がかかります。**他の電卓で計算をして暇つぶしにでもしましょう**。

届いた際の初期バージョンはOS 3.20でした。そして最新のOS 3.80にアップデートしました。ちなみに、CASIOのインストーラーは配布されているアドインソフトも同時に入れてくれるようです。後で`Distribution`(確率)ソフトを入れる手間が省けたのでありがたいです。(でも一緒に`Prob Sim`も入れて欲しかったなぁ)

### `Khicas50`(χcas50)のインストール
まず、この電卓には前述の通りCASが搭載されていません。なら搭載すればいいのです。KhiCASはGiac/XcasがベースになっているCASソフトです。それぞれの電卓でも動作するようにカスタマイズされているのが特徴です。名前の由来は`Xcas`→`χcas`→`KhiCAS`で、開発者によると「単なるジョーク」とのこと。

操作体系や画面の雰囲気は全くもって違います。KhiCASの操作は「Xcasそのまま」の感じです。慣れてる自分には使いやすい…訳ではなくやはりキーボードが電卓用なので、若干しんどいですがまぁいいでしょう。CASが使えたら良いので。

![IMG_0119.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/6965823e-80c5-585c-32b6-e73a99dc5398.jpeg)
↑システム(本来)の実行画面

![IMG_0120.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/3fa3cca8-2bbc-3548-9deb-c8f40800355d.jpeg)
↑KhiCASの実行画面

無論KhiCASの方が表示密度は原型を忘れるほど細かいのですが、この上位互換(の小ささ)のHP Primeを使ってしまったのでもう何も感じません。

そしてKhiCASが搭載する最も謎でありながら有用な機能が**オーバークロック**です。100MHzではKhiCASは若干足りないとでも言うのでしょうか。起動時にこの画面でオーバークロックするか問われます。
![IMG_0121.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/ace3c47f-f166-2ae0-e84a-f0d2502a539f.jpeg)
ここで`EXE`を押せばオーバークロックされ、`EXIT`を押すと定格で動作します。

そしてこれが意外と速度は違うので、私はオーバークロックモードで使います(前述の通り、SH-4Aは400~600MHzくらいまでは使用可能)。

## プログラミング機能
ここからはfx-CG50に内蔵されているプログラミング機能について紹介していきます。まず、内蔵されているものは
- Basic-Like(CASIO独自言語/Basicらしさは皆無)
- MicroPython v1.9.4(ライブラリは少ない/OS 3.20~)

の2つです。後者Pythonについてはコード編集画面とシェル画面に分かれています。またCPUのSH-4A(SuperHシリーズ)はRISC系なので、ネイティブでPythonが動作するようです(TI-84 Plus CEだと、Pythonのために別でARMプロセッサが積まれています)。

### Basic-Like
まずはBasic-Likeから紹介します。Basic-Likeは使いにくいのですが、電卓のハードウェアにアクセスできるのは、Basic-Likeだけなのです。

同じく独自言語のHP Prime Programming Language(HP PPL)もBASICを弄った少しクセのある言語でしたが、それでも`BASIC`**の**`BAS`**までの3文字は残っていました(**`IC`**は消えました)**。幸い私はBASICの入りだけは理解していたのでリファレンスを見つつで耐えられましたが、Basic-Likeは無理です。

ちなみに、全くもってBasic-**Like**ではなく、もはや**UnLike**でもなく、**Against-Basic**という状況です。

なぜ`input`を`?`として移植したのか。なぜ`print`を`◢`と移植したのか(※厳密には違いますが、同じような使い方をします)。せめて、~~打ちにくい~~電卓のキーボードでギリギリ打てるコマンドにして欲しいです。

~~ここではレビューすることを諦めて、さっさと目玉機能(ということになっている)のPython機能を見ていきましょう。~~ 流石に軽く組みます。

ここでは$x(sin(x)+cos(x)+1)$の$x$を$K$から$N$まで変化させてその和を求めます。入力された2数の関係が$K>N$の場合はエラーを返すようにします。以下がコードです。

```:SIGMA(CASIO Basic-Like)
"Sigma START"?→K↵
"Sigma END"?→N↵
If K>N↵
Then ↵
"Syntax ERROR"↵
Stop↵
IfEnd↵
"Σ(x(sin x+cos x+1))="↵
0→S↵
For K→I To N↵
S+(I*((sin I)+(cos I)+1))→S↵
Next↵
S◢↵
"END"
```
<font color=red>**何なんですかこの言語(怒)**</font>

この実行結果は以下のようになります(これは例です)。どちらの例も質問文の次の行の数字は任意の数字でユーザーが入力するものです。

```:Shell
Sigma START?
0
Sigma END?
100
Σ(x(sinxx+cos x+1))=
          11107.91076
             - Disp -
END
```
次に、入力でエラーを起こす例はこちらです。

```:Shell(ERROR)
Sigma START?
10
Sigma END?
5
Syntax ERROR
```
この言語は使い慣れている人には使いやすい(他のを使えない)し、初めての人は次に述べるPythonを使うし、みたいなところでしょうか。

---

ちなみに、こんなくらいの合成抵抗を出すプログラムは向いていると思います。
```:PARARES
"PARALLEL RESISTER"↵
"R1"?→A↵
"R2"?→B↵
""↵
"R="↵
A*B/(A+B)
```

結果は以下の通り。
```:Shell
PARALLEL RESISTER
R1?
50
R2?
1000000

R=
           49.99750012
```

まぁこれくらいなら実用的ですね。

### MicroPython
こちらは、`Python`アプリケーションの中で閉じたものとなっています。ハードへのアクセスはできません。いつか対応するんですかね？一応Microとは言えPythonなので通信関連にアクセスできたら幅が広がりそうですが…フランスでの学習目的の機能なのであり得ないでしょう。乞うご期待。

使えるモジュール(OS 3.20)は、`math`･`random`で、OS 3.40からは`casioplot`という独自の描画モジュールが利用できます。

ここでは、OS 3.40以降(今回なら3.80)で実行していきます。`casioplot`が使用できないと、プログラム内のデータを描画することすらできません。ちなみに、フランス版fx-CG50のGRAPH 90+Eでは`turtle`グラフィックスが利用可能なので、理論上は本機でも動作するはずですが、どうやら`turtle.py`を入れてなんやかんやしないとダメみたいなので諦めます。

次のプログラムは、0,1の整数乱数を生成し、そのすべての要素を画面に表示した上で各要素の割合を表示します。

僕の貧弱な脳みそではこれくらいのプログラムしか`casioplot`モジュールを使う方法が思いつきませんでした。

```Python:RanIntProb.py
from casioplot import* #描画モジュール
from random import* #乱数モジュール

clear_screen() #表示内容の初期化

Y=0 #描画パラメータの初期化
S=0 #確率演算用パラメータの初期化

for i in range(9): #乱数の生成と要素の表示
  X=0

  for j in range(38):
    R=randint(0,1)
    draw_string(X,Y,str(R))
    X=X+10
    S=S+R

  Y=Y+18

P=S/342*100 #確率の算出
Q=100-P

draw_string(0,160,"0:",(255,127,0)) #確率結果の表示
draw_string(20,160,str(Q),(255,127,0))
draw_string(370,160,"%",(255,127,0))

draw_string(0,176,"0:",(0,63,255))
draw_string(20,176,str(P),(0,63,255))
draw_string(370,176,"%",(0,63,255))

show_screen() #画面の表示
```
なんかもう、クソ言語です。HP PrimeのPython機能はかなり良かったですが此奴のPython機能は終わっていますね。

**使いたくない**です。

### KhiCASのPython
KhiCASには、本気Xcas同様にPythonインタプリタを備えます。コードを書いて、それを実行できるのです。どちらにせよインタプリタなので速度は知れていますが、KhiCASの方がよっぽど便利です。

加えて、KhiCASでは`turtle`モジュールも利用できます。また、KhiCASも内蔵Micro Python同様にハードウェアへのアクセスはできませんが、あくまで**KhiCASの**Pythonですから、描画機能もあります。統計グラフもお手の物なので、Pythonを使いたいなら、KhiCASを入れましょう。

## [余談]本記事投稿に時間がかかった訳
この記事は、いつにも増して気合を入れて執筆しています。なぜなら、fx-CG50は**私が見た初めてのグラフ電卓**であり、**関数電卓に興味を持った理由の1つ**であるからです。

そもそも執筆は大変になるはずでしたが、使ってみると**予想外に機能が多すぎて溺れる**という事態に陥り、~~えらいこと~~大変なことになってしまいました。

ということでなんだかんだ取説やらリファレンスやらサイトやらを見て理解していくうちに、時間が過ぎ、こんな時期になってしまいました。私にしては珍しく、購入から約1ヶ月後の投稿になります。

## おわりに
まず結論。この電卓は、若干毒が強いような気がします。RPN電卓ほどではありませんが(あれは毒というよりかはカリスマ)、それに近しい毒を持っています。

具体的に言うと、**操作が難しすぎる**のです。HP Primeはfx-CG50を遥かに超える機能数をタッチパネルという**強力な入力デバイスを用いてカバー**していました。あのシームレスな操作体験は利用者を虜にできるほどだと思います。しかしこの電卓には高機能さをカバーできるような**強力な入力デバイスを持ち併せていない**のです。

しかしこのような**操作しにくいという毒**を余裕で超えてくる機能の豊富さ・安定感は利用者を離れられなくします。その類のものを今回の電卓から**も**感じました。

その最たる例が今回は検証してこなかった「3Dグラフ」です。通常のグラフ電卓は3Dグラフが描けても`z=`形式と、機種によってはパラメーター(媒介変数)方式が描ける、というような2方式までです。しかし、この電卓はそれに加えてテンプレートを用いた特定図形の描画と2Dグラフの回転グラフが描画できます。

その描画形式は分かりやすいGUIではなく、半分CUIのような、下1行のコンテキスト依存メニュー(ファンクションメニュー)です。しかも段階を重ねての操作なので、分かりにくいのです。これがHP Primeなら、式の入力画面の分かりやすい位置に展開式のメニューで配置されるか、頻繁に開くSymbビュー設定の中にでもありそうです。

ですが、述べてきた「毒」の濃度もそこまで高くはないので、他の人にも勧められます。ぜひ、買ってみてはいかがでしょう。

なお、以前の記事で「関数電卓を導入すべきか？」という問いに対して考察していました。この電卓は導入する関数電卓として適していると感じます。詳しくは記事をご覧ください。

https://qiita.com/bockring/items/1a3ff3ee65aa015b4848

## [付録]Ptuneでオーバークロック
せっかくの高性能なCPUを低スペックで使用していると思うことがありませんか？**オーバークロック**です。ありがたいことに、`Ptune`というソフトで簡単にOCできます。しかもプリセットが設定されているので、それを選択して保存するだけです