電卓の日企画：関数電卓(1行機)あれこれ(おまけあり)

## 3月20日は電卓の日
3月20日は電卓の日だそうだ。
「1974年（昭和49年）にわが国の電子式卓上計算機（電卓）の生産数量が年間1000万台を突破したことと、国産の電卓が発売されてちょうど10年目の節目に当たることを記念し、社団法人 日本事務機械工業会（現在の一般社団法人 ビジネス機械･情報システム産業協会）の電卓部会が制定」したとのこと。

https://mobile.jbmia.or.jp/calculator_dic/dentaku-no-hi.htm

このアカウントでは再三関数電卓を扱ってきたが、電卓の日にちなんで今回は関数電卓の元祖とも言える1行機の詳細について見ていく。

![1line_5cals.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/01816695-50ca-4ab7-81b4-2af1da860151.jpeg)
（左上から、モノタロウ関数電卓、KD-1005（EL-501系クローン）、キヤノンF-605G、シャープEL-501T、シャープEL-501J）

## F-605GとEL-501Tの比較
### レイアウト
キヤノンF-605GとシャープEL-501Tの写真を並べると以下のようになる（レイアウト比較のため大きさを揃えた）。
![f605g_el501t.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/2329c66a-7f90-4263-b532-7295e9cd5302.png)
2機の下半分を比べると、EL-501Tのレイアウトの方が一般電卓に近いと言える。
F-605Gは右下が[M+]になっているため、[=]を押そうとして不用意に[M+]を押してしまうことが度々起きた。
EL-501Tは[C]や[CE]が右上に離れている点がやや残念であるが、キーもそれなりにしっかりしているため一般電卓の代わりとして持ち歩いても遜色なく使えるだろう。F-605Gはキーがゴムである点もデメリットかもしれない。

### 機能
しかしながら、EL-501Tのメリットはその位で、機能面はF-605Gの方が良い。
EL-501Tは前モデルから組み合わせ・順列・結果丸め機能が追加されたが、まだF-605Gには及ばない。
* EL-501Tのみの機能：表示数値と内部数値の入れ替え、3桁区切り
* F-605Gのみの機能：分数、M-、変数メモリ(A～F)、統計モードのmin・max、60進数（度分秒・時分秒）の直接計算

### 括弧計算等におけるスタック数比較
1行機では逐次計算を行うが、括弧や乗除が加減に優先されることから、演算が確定しない段階では一時的な結果を入れておく“箱”が必要になる。これをスタックという。括弧や乗除が絡む計算でスタックが足りなくなるとエラーとなりそれ以上の計算が行えない。

例えば、[【計算機教學】CASIO fx-82SOLAR II 張翔老師獨家講解](https://youtu.be/DmfM3Ihmx5Q?si=xb5xQnik9VTXgHOr&t=1983)の動画で紹介されている式を試してみよう。
```math
1 - (1 - 0.9 × (1 - (1 - 0.9)^2))(1 - 0.9^3)
```
F-609Gは答(0.970461)を導けるが、EL-501系は2番目の0.9の直前の - を入力した時点でエラーとなってしまう。

もう一つ例を上げると、
* F-609G: 2 × (2 × (2 × (2 × (2 × (2 × (2 × でエラー
* EL-501T: 2 × (2 × (2 × (2 × (2 × でエラー （EL-501Jやモノタロウ関数電卓も同様）

EL-501Tの説明書には「カッコは保留される計算が4個を超えない範囲で使用できます」とあり、F-605Gは「括弧付き計算および算術計算で、計算機に記憶されている演算子の数が5段階を超えた場合エラー」とある。
つまり、EL-501系の方がスタックが(2つ?)少ないため、F-605Gやfx-260/82 SOLAR II（カシオの1行機）で計算できる式が計算できないということが起こりうる。

### 三角関数ベンチマーク
三角関数を繰り返し適用することで丸め等の誤差が生じる。これを見るためのベンチマークとして arcsin (arccos (arctan (tan (cos (sin (9) ) ) ) ) ) がある（[Mike Sebastian氏によるまとめページ](https://www.rskey.org/~mwsebastian/miscprj/results.htm)）。
* F-605G:9.00000003, 誤差3.04418E-8
* EL-501T:8.999981534, 誤差-1.846572E-5
* EL-501J:8.999998637, 誤差-1.36296E-6
* モノタロウ:8.99999986, 誤差-1.3999E-7 （KD-1005も同じ）

この結果だけ見ると、F-605Gの精度が最も優れており、後継機種のEL-501Tより前機種のEL-501Jの方が精度がよく、さらにモノタロウ関数電卓の方が精度が良いということになる。
加えてEL-501Tは平方根の連続演算に時間がかかる（[龍王氏の動画](https://www.youtube.com/watch?v=rWP3XkP9GUQ)も参照）ことから、EL-501JとはROM等が異なるのだろう。

とはいえ、全ての面でEL-501Tが改悪というわけではない。

## EL-501系の60進数(度分秒・時分秒)バグ
EL-501系（EL-501T, EL-501J, モノタロウ関数電卓等）は60進数（度分秒・時分秒）を直接扱えないため、予め10進数に変換してから計算し、答を60進数に再変換する。

EL-501Tの前モデル、EL-501Jはこの変換に一部バグがあり、1.226000(=1°22′60″)、9.406000(=9°40′60″)のような結果を表示することがあった。モノタロウ関数電卓も同様である。

https://digistill.hatenablog.com/entry/2023/05/28/223846

同じ計算をEL-501Tで行うと、1.230000(=1°23′00″)、9.410000(=9°41′00″)と表示され、このバグは修正されている。

## 作業環境測定士登録講習に見る1行機の優位性
作業環境測定士登録講習では関数電卓を使った実技があるという。

https://www.jawe.or.jp/kosyu/dentaku.html

実際の計算はこのようなものらしい。
* https://tmetal4444.com/2021/11/26/%e7%99%bb%e9%8c%b2%e8%ac%9b%e7%bf%92%e8%a8%88%e7%ae%97%e5%95%8f%e9%a1%8c%e3%81%ae%e7%b7%b4%e7%bf%92-%e4%bd%9c%e6%a5%ad%e7%92%b0%e5%a2%83%e6%b8%ac%e5%ae%9a%e5%a3%ab/
* https://x.com/kamitta_cocoa/status/1880190909289230439
* https://www.nishieikai.or.jp/training/.assets/guidance_touroku20250114.pdf

|手順|F-605Gでの操作|
|:--|:--|
|1. 統計モードで測定値を入力（log値）|[SHIFT][MR]（STAT）<br>データ1[log][M+]データ2[log][M+]…|
|2. データ数（n）を記録|[(]（n）|
|3. log値の算術平均（x̄）を算出|[)]（x̄）|
|4. 3の真値=幾何平均を算出|[SHIFT][log]（10<sup>x</sup>）|
|5. 標準偏差を算出|[X→M]（s）|
|6. 5の真値=幾何標準偏差(1日)を算出|[SHIFT][log]（10<sup>x</sup>）|
|7. 評価用の標準偏差を算出（√(s<sup>2</sup>+0.084)）…A|[X→M]（s）[x<sup>2</sup>]+0.084=[√]<br>[SHIFT][RCL]（STO）[a b/c]（A）|
|8. 7の真値=評価用の幾何標準偏差を算出|[SHIFT][log]（10<sup>x</sup>）|
|9. 第1評価値の算出 x̄ + 1.645A<br> → 真値に変換|[)]（x̄）+1.645×[RCL][a b/c]（A）=<br>[SHIFT][log]（10<sup>x</sup>）|
|10. 第2評価値の算出 x̄ + 1.151A<sup>2</sup><br> → 真値に変換|[)]（x̄）+1.151×[RCL][a b/c]（A）[x<sup>2</sup>]=<br>[SHIFT][log]（10<sup>x</sup>）|

この流れで特に1行機が効果を発揮すると思われるのが、算術平均（x̄）や標準偏差（s）の呼び出しだろう。

複数行機だとデータ入力画面と変数呼び出し画面が別になる。
fx-375ES Aを例にとると、
データ入力→[AC]→[SHIFT][1]（STAT）→4:Var→2:x̄→[=]
とやって初めて算術平均が出てくる。

カシオ系2行機は[SHIFT][1]（S-SUM）と[SHIFT][2]（S-VAR）に統計量メニューが分けられており、前者にn（と∑x<sup>2</sup>・∑x）、後者にx̄とxσ<sub>n-1</sub>（とxσ<sub>n</sub>）が入っている。慣れるまでは両方のメニューを開いてどちらに入っているか確認する必要がありそうだ。

この2つと比べ、1行機（F-605G）はデータ入力が終わったらすぐに[)]（x̄）キーで算術平均を呼び出せる。続けて[SHIFT][log]（10<sup>x</sup>）とやれば真値が出てくる。
惜しむらくは、Aの値を保存するためのメモリがEL-501系にはない（Aを紙にメモして入力する手はあるが）。この用途ではF-605Gを用いた方がよいだろう。

1行機はキートップに書かれている機能しか使えないが、逆にいうと全ての機能をキーで直接呼び出せるということである。メニュー選択で上下左右にカーソルを移動するなどという操作は一切無い。これが1行機のよさである。

## 統計計算モードでエラー・意図しない答が出る問題
きっかけはこの記事だった。

https://digistill.hatenablog.com/entry/2024/05/20/205511

https://digistill.hatenablog.com/entry/2024/05/20/000107

```math
平方和 S = \Sigma x_i^2 - \frac{(\Sigma x_i)^2}{n}
```
$ \Sigma x_i^2 $ も $ \Sigma x_i $ も統計計算で求めることができる。
そこでF-605GとEL-501Tの統計計算モードで平方和を求めることにした。
が、なぜか両機ともうまくいかない。

* EL-501Tの場合
    * ∑x<sup>2</sup> - ∑x [x<sup>2</sup>] ÷ と操作した時点でエラー
    * 前後逆にして ∑x [x<sup>2</sup>] ÷ n = [+/-] + ∑x<sup>2</sup> = とすれば正しい答が求まる

これは一部エラーが出るものの、正しい答を導けるのでまだよい。
問題はF-605Gの方である。

* F-605Gの場合
    * ∑x<sup>2</sup> - ∑x [x<sup>2</sup>] ÷ n = はエラー
    * ∑x<sup>2</sup> - ∑x [x<sup>2</sup>] ÷ 8 = 2122.26125（間違い）
    * 前後逆にして ∑x [x<sup>2</sup>] ÷ n = と入れた時点でエラー
    * ∑x [x<sup>2</sup>] ÷ 8 = [(-)] + ∑x<sup>2</sup> = 2139.27（間違い）

n の値で割ろうとするとことごとくエラーになり、 n の値を手動で入れると誤った答が出る。
最初の誤答は ∑x<sup>2</sup> - の部分が無視され、 ∑x [x<sup>2</sup>] ÷ 8 の値になっている。
2つ目 ∑x [x<sup>2</sup>] ÷ 8 = [(-)] + ∑x<sup>2</sup> の方は、中間の値は正しいものが表示される（∑x [x<sup>2</sup>] ÷ 8 = の時点で2122.26125、 + ∑x<sup>2</sup> の時点で 2131.27）が、最後に = を押すとなぜか ∑x<sup>2</sup> に 8 が足されて 2139.27となる。

スタックが足りていないのが理由と思われるが、とにかく F-605G の統計計算モードで統計量を使った計算をする際には十分注意してほしい。統計値をA～Fのメモリに入れて通常の計算モードに戻れば問題なく計算できるので、統計計算モードは統計量算出だけに使うような割り切りが必要かもしれない。

## おまけ：fx-82MS（方程式計算機能無し）で2次方程式を解く方法
1行機の記事なのに最後は2行機のネタを。
fx-82MSの2次回帰計算機能を使って2次方程式を解く動画がYouTubeに上がっている。

https://www.youtube.com/shorts/IdU62Cn2dFU

* MODE→REG→Quadを選択
* C,C<sup>2</sup>-8C+15（動画の例題の場合） と入れ、[M+]を3回押す
* [SHIFT][2]（S-VAR）→x̂<sub>1</sub>を選択
* Ansx̂<sub>1</sub>となるのでAnsを0で上書き、[=]
    * 1つ目の解が表示される
* [SHIFT][2]（S-VAR）→x̂<sub>2</sub>を選択
* Ansx̂<sub>2</sub>となるのでAnsを0で上書き、[=]
    * 2つ目の解が表示される

Cを使う理由は、X,Y,A,Bが内部変数として使われるからだろう。
なぜこんなことが可能なのかわからないが、とにかく2次方程式が解けてしまう。整数解だけでなく、√を含む解も可（小数になるが）。虚数を含む解はエラーとなる。

手元の82MSクローン機（JS-82MS-A）でも解けたので、現行機種のfx-290Aでも解けるはずだ。
カシオ系2行機がある人は試してみてほしい。