fx-4850Pをレビュー　初代Basic Like(笑)を使ってみる！

## はじめに
こんにちは、電卓爆買い中(?)ことbockringです。

今回、3台まとめて購入しました。
- fx-4850P　**←今回はこれ！**
- fx-115ES Plus 2nd Edition
- F-789SG

この3機種をレビューしつつ、おすすめ電卓の記事も書いている、なかなかカオスな状態です。

ここでネタバレしちゃうのも何とも変な感じですが、下の画像の状態になっています。

![IMG_0074.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/d93675f3-55e8-4cbb-9e28-6e98f332f17f.jpeg)

まずはプログラム電卓fx-4850Pからレビューしていきます。
なお、中古です。　←最近、中古を買うことが多いなぁ

## fx-4850P
プログラマブル関数電卓の現行機種の1つ前のモデルです。

fx-4000Pシリーズに属し、fx-4800Pとfx-4850Pはマイナーチェンジレベルの差です。

- 基本計算(複素数OK)
- 1変数統計
- 2変数統計(直線回帰計算)
- n進・論理演算
- 漸化式
- プログラム

案外機能数は控えめですが、漸化式機能が特徴ってところでしょうか。この電卓で困ることはそうそうないと思います。

演算速度も十分というレビューが多いので、期待です(EL−566Eとどちらが使いやすいかが焦点です)。

プログラムの章の画像で確認していただきたいのですが、画面右上に`28KB`を印字されています。これはやはり、プログラム関数電卓として1997年発売当初は**相当大容量**だったことを示すのかなと、考えられるのです。(実際、基本モデルのfx-4800Pは4.5KBだったようです)　2011年(?)発売のSHARP　EL-566Eですら(簡易プログラム機能であるにせよ)640STEP(640Bytesと考えて良い)であったのですから、その差は歴然です。

約30年前の電卓が28KB。30年前といったらWindows 95の頃ですよねぇ… その頃の28KBは現代の28KBとは比べ物にならない価値だったでしょうね。Win95のシステム要件はRAM:8MB以上(12MB推奨)・ROM:75MBとまだまだメガバイト最盛期ですから。その時代の28KBは相当な価値があります。

## まずは基本のレビュー
使い心地からレビューしていきます。どうしてもキーのクリック感の弱さが気になります。私が単純にクリック感のあるものが好きというのもありますが、**クリック感がないとちゃんと押せているか不安**になるんですよね。

そして仕方のないことですがソフトウェアメニューというのも少し使いにくい要因かと思います。しかし少ないキーで多くの関数を使えるようにする必要がありますから、ここは我慢です。そもそも数字入力で選べるタイプなので、案外マシなものです。**fx-JP500/700/900CWとは比べ物にならないくらい使いやすい代物**です。

速度は十分に速いかと思います。一応下の定積分(「電卓喫茶」さんで紹介されていたもの)を解かせたところ、fx-JP900, TI-36X Pro, そしてほんの少し間をおいてfx-4850Pの順にゴールインしました。fx-115ES Plus 2nd Edition(fx-375ES Aと同系統)よりはかなり速くゴールインしていました。~~SHARP機とは比べてはいけないレベルです。~~

```math:
\int_{0}^{10^2}{x(sin(x)+cos(x)+1)dx}
```

あと、CALC機能とSOLVE機能が少し古いことも触れるべきでしょうか。独立数式記憶枠に数式を保存(IN)してからの使用になります。

速度は意外にも苦にならないレベルでした。とはいえ、最速のスタンダード関数電卓達(fx-JP900CW, fx-JP900, TI-36X Pro)を使ってきたせいで若干遅く感じてしまうのはなぜでしょうか(自明)。

あと地味に初めて大画面のライン表示電卓を使いましたが、案外楽ですね。カーソル操作がいらないだけで、素晴らしい。

微分は中心差分法、積分は不明です。が、ガウス・クロンウッド法ではないでしょう。多分シンプソン法です。どちらも桁数精度は悪く、特に後者は精度が出にくい点は注意です。

サイズが小さいことも特筆すべき点でしょう。私が使っている150mm品のアナログ金属ノギス(長さの測定をする道具はアナログ派です)はMAXで158mmくらいまで開くのですが、**他の関数電卓では収まらない**のに、**本機種は収まってしまいます**。これは驚きです。

横幅80.50mm、縦幅157.05mm(ロック用ノッチ除く)、ボタンを含んだ厚さ16.55mmです。ケースを閉じると15.35mmになります。これらの**値の全てはfx-JP900(ClassWiz EXシリーズ)を下回る値**です。ホント、コンパクトでパワフル、そして多機能な電卓ですよね。

そうそう、**[STO]と[RCL]がそれぞれで独立している点は賞賛すべき**点です。戻してくれよ、CASIOさん。そのためだったら[ENG]キーが裏に回っても黙っておくからさぁ。

## Basic-Like(笑) 第1世代
どうやらCASIO Basic-Like(通称「CASIO Basic」)には世代が2つあるようです。**どちらもキーストローク言語**ですが、第2世代の方が読みやすさの向上と多様なコマンドの追加がされているみたいで、[fx-CG50](https://qiita.com/bockring/items/0b0cb24771019c6ec232)に搭載されているCASIO Basicが第2世代みたいです。しかし、今回は**第1世代をレビュー**していきます。


説明書を読み、実践し、何とか言語の使い方は理解できましたから紹介していきます。

### PARA-RES(合成抵抗)
まずは僕にとって定番の合成抵抗の計算プログラムから。

COMPモードで実行します。

```text:PARA-RES    :CO
"N OF RES"↵
{N}↵
N=2⇒Goto 2◺↵
N=3⇒Goto 3◺↵
Goto E
Lbl 2↵
R=AB/(A+B)↵
Lbl 3↵
R=ABC/(AB+BC+CA)↵
Goto 0↵
Lbl E↵
"ERROR!"↵
Goto 1↵
Lbl 0↵
Cls↵
"PARALLEL RES"↵
" "↵
"R="↵
R↵
Lbl 1
```

これを実行すると、最初に抵抗の本数(2 or 3)を問われます。そこで入力し、それぞれのモードにジャンプします。モードが適切でない時は`ERROR!`と表示して終了します。

ここで感じたのが、**EL-566Eよりは使いにくいけど便利ではある**ことです。ジャンプを何度も使えるということは複雑なものが作れるということです。EL-566EのAERに求めることではないですが…

### MONTE CAR(円周率の算出)
$\pi$を求めます。

乱数の精度が気になりますが… 乱数のランダム性は微妙かなってところです。

そのうえモンテカルロ法で算出するので精度は全くもって期待できません。あと時間がかかります。

```text:MONTE CAR   :CO
"MONTE CARLO"↵
"    CALCULATE π"↵
{N}:P=N↵
Cls↵
"CALCULATING..."↵
A=1↵
D=0↵
E=1↵
Lbl 1↵
B=2*Ran#-1↵
C=2*Ran#-1↵
(B^2+C^2)≦1⇒D=D+1◺↵
Dsz N:N>0⇒Goto 1◺↵
Cls↵
"DONE."
"π="↵
4*D/P
```

こちらは開始するとサンプル数の入力を求められます。今回は`1000`でいきます。これでも十分時間がかかります。

算出結果は`3.116`でした。ズレズレです。まぁでも動作していることは確認できました。

2回目も計算してみました。先ほどと同じく`N=1000`ですが、精度はマシでした。

![IMG_0085.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/cd4fad8a-d0ee-4b97-a490-6bdcd00434bd.jpeg)

この次は頑張って怒涛の`N=60000`で実行しました。**大体75分**でした(電池は新品を使用)。長い… **800Calc/m**という結果です。うーん、早いのか遅いのか、よくわからないですね…

![IMG_0086.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/1e9741c4-28d9-4d81-9e3b-be972b480d2c.jpeg)

さっきと精度も変わってないですね… 前者が`0.01440734641`、後者が`0.01172598692`だけ実際の値とずれています。サンプル数が多い分後者の方がマシですが… ~~2度と実行したくありません。~~ 懲りずに`N=100000`でも実行しました。**大体110分**でゴールインです。結果は`3.12692`で、差は`0.01467265359`でした。**変わっとらんやん…**

このプログラムだと、**毎分800~900ループ程度の実行速度**になるようです。

---

そして、100000回の演算を終えた地点でこの表示が。
　`**Low battery!!**`
あれま。でもそりゃそうか。それなりに高性能なCPUで、高速処理を実行し、プログラムのループを**少なくとも165,000回は実行した**のです。しかもそれ以外の回数も含むと**200,000回くらいは実行した**のですから、**電池が無くなるのも無理はない**です。~~あれ、昨日(5/8)に受け取って、新品の電池入れたばっかりじゃね…？~~

電池寿命もまぁ十分長いかな、と思います。でもCR2032駆動っていうのは…コスパが悪いようにも思えます。

どうしてもCR2025しかない場合は、交換時期の繰上げを覚悟の上でメモリ保護用電池をCR2025で代用してもいいかと思います。しかし、「cそれくらいだったらCR2032の方がまだ安上がりじゃね？」ってなってしまいます。ちなみに定格電力(0.05Wh)で13時間くらい使える計算になります。

---

このプログラムが作れたので、CASIO Basic(第1世代)はある程度マスターできたと思います。第2世代のは私には理解不能でしたが、第1世代の方は電卓で動かしていることを考えれば十分に良い言語かと思います。まぁ、使いやすいかと。

:::note info
**CASIO Basic(第2世代)**
こちらは第1世代のものよりもさらに進んだ構造化定理です。
しかし、`Lbl`や`Goto`コマンドを多用する言語なので、イマイチかと思います。ループ専用のコマンド(`For`や`While`など)がないためです。

第2世代ではループ用コマンドが追加されています。しかし、fx-5800P(fx-4850Pなども含むプログラム電卓)の入力方式とその他グラフ電卓(fx-CG50など)の入力方式では前者に分があります。

ちなみに、中の人はこの後CASIO Basic第2世代が理解できました。第1世代を履修したおかげですね。
:::


### PRIME FACTOR(素因数分解)
取扱説明書にも載っているコードです。しかし、今回はあえて自分で作り直してみました。めちゃくちゃに効率の悪い動作をしています。

```text:PRIME FACTOR:CO
" =PRIME FACTOR="↵
"ENTER A NUMBER"↵
N=N↵
Lbl 1↵
A=2↵
Lbl 2↵
A≧998⇒Cls:" === ERROR ===":"   [OVERFLOW]":"TOO LARGE PRIME":"   PRESS [AC]":Goto 4◺↵
B=N/A↵
C=Int B↵
B=C⇒Goto 3◺↵
≠⇒Isz A:Goto 2◺↵
Lbl 3↵
A◢
N=N/A↵
N≠1⇒Goto 1◺↵
"DONE."↵
Lbl 4
```

本家とは違って、1000以上の素因数を持つ場合(1000以上の素数を入力した場合を含む)は、その処理に達した時点でオーバーフローとして処理を切り上げます。1000以下の最大の素数は997ですから、素因数処理の変数Aが998に達した時点で処理を停止します。以下のような画面が表示されます。

![IMG_0093.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/a0de878a-3713-43bf-96a9-5eacdaadc3f4.jpeg)
↑液晶の反射型の特性でもありますが、影ができて少しみにくいかもしれません。許してください。文字が多いから余計にそう見えます。

1000以下の素因数の範囲で素因数分解をするというのは、CASIO現行機種の仕様と揃えるためです。あと、それくらいの時間で切り上げないと待ちきれないのです。いやホント、Dispで毎回止まるのはやめて欲しいなぁ(画面範囲の問題があるから仕方ないけども)

素数の一般項の公式を使うと、そっちに処理の時間がかかるような気もするので、無駄に1ずつステップさせた方がマシかと思います。

### CASIO Basic総括
電卓で走らせる言語としては十分に扱いやすく、高度な機能も手軽に作れるかな、っていう印象です。

しかし、`GetKey`と`Locate`が使えないのは痛いと思います。入力は任意入力しかできないのが問題です。

でも、**絶対にBASICではありません**。また**Basic-Likeでもありません**。似ているわけがないでしょう、この言語が。

あと、条件ジャンプ(分岐)行の最後に`◺`の記号を入れ忘れると、嘘みたいに正常動作しなくなります。

長すぎて途中中断する場合は`AC`を押せば直ちに中断できます。半押しとかによる誤爆回避機能はないみたいです。

## その他機能をレビュー
この電卓はライン表示電卓ですから、少し操作が難しいです。

### COMP
`COMPUTE`の略語です。通常の数学計算に加えて、複素数計算もできます。ですが、$e^{\pi i}=1$とかは計算できません。あくまで複素数計算は四則演算のみってところです。

### BASE-N
n進演算です。相互変換は`FUNCTION`キーから毎回切り替える必要があるので、多少面倒です。

論理演算もできますが、これもソフトウェアメニューないなので… まぁでもないよりかは便利です。

### SD
`Standard Deviation`(標準偏差)の頭文字をとった略語です。

ライン表示電卓の統計機能は使いやすく感じます。統計値はソフトウェアメニューから呼び出します。

### LR
`Line Regression`(直線回帰)の頭文字をとった略語です。

2次回帰(Quad)や対数回帰(log)、指数回帰(EXP)などは使用できない点は残念かなと思います。使えたら便利なんですけどねぇ…

### an
厳密には$a_{n}$と表示されています。

漸化式機能です。単純な数列($a_{n}=$)に加えて、2項間漸化式($a_{n+1}=$)が利用できます。一般項あるいは漸化式を入力し、nの値を入力することで、そのnにおける数列の項とそこまでの和が表示されます。

## おわりに
今回はfx-4850Pをレビューしてきました。やはり古いのか、機能不足を感じました。今買うなら、もちろんfx-5800Pを買うべきですが、個人的には満足のいく機種でした。

fx-5800P、買っちゃおうかなぁ…
といってもfx-5800Pの高速化も僅かだからなぁ…
(↑これに関しては本当で、[e-Gadgetさんの記事](https://egadget.blog.fc2.com/blog-entry-714.html)で速度比較されていますが微々たる差です。逆にいえば、fx-4850P(とfx-4800P)が十分に高速化されたモデルであることを意味します。)
でも速度以前に数学自然表示と、特に機能追加は欲しいんだよなぁ(コマンドの追加とか回帰計算の機能向上とか)

それにしても**ポケコンみたいな可愛らしさのある電卓**でした。とうとう僕も変態の道を歩み出したんだな

それではまた〜

(あれ、今回の記事は大量に括弧を使ったなぁ… ってここもカッコの中か。)