HP Primeグラフ関数電卓を購入！

## はじめに
こんにちは、「趣味ってなかなかお金かかるなぁ(n回目)」と今日も思うbockringです。

私はお金しかかからない趣味をたくさん持っているのですが、そのうちの1つが「計算機」です。前回、fx-JP900CWを買ってから計算機の世界に入ってしまいました。そして同趣味の方には共感いただけると思いますが、「HP-42Sが欲しい！」っていう願いがあるんですよ。まぁとにかくネタ枠かロマン枠の電卓が欲しい訳です。

せっかくなのでHP Prime G2を購入しました。Amazonで28108円(なおPrimeセール1日目)、まぁそれなりの値段ですね

https://amzn.to/3QiZmNN

## HP Primeとは
HP Primeというのは、かの有名なHP(Hewlett-Packard)から発売されているグラフ関数電卓です。電卓のクセにタッチ対応カラー液晶を搭載し、無駄に高性能で、画面も大きくて、(中略) 結構ロマンある電卓なのです(もちろん、HP-42SやHP-15Cなどの方がロマンはあります)。

そしてPrimeシリーズにはG1/G2の3つのバージョンがあり、高性能化を果たしています。また、ハードウェアリビジョンはA/B/C/Dで、おおざっぱに紹介すると、

- A:初期型　基本的な設計が完成、しかし付加機能は少ない
- B:改善型　USB通信機能などの追加
- C:初期最終型　キーの配色が改善され、視認性向上
- D:第2モデル　CPUなどハードウェアの刷新

です。B/Cの製品番号は同じで、A~Cは全てG1です。本体裏に`G2`という小さな刻印があればDとなっています。

世界最高速の速度を誇り、このグラフ関数電卓は主に2次元/3次元グラフを描画することを得意とします(3次元グラフの描画ソフトは指でのタッチ操作で向きを変えられるため、非常に楽です)。

そしてCAS(数式処理システム)を搭載し、このON/OFFの切り替えが可能で、場面によって使い分けることもできます。また、RPNも使用可能で(すが非常にショボいのであまり期待しない方が良いと思うものの)、色々多機能です。(しれっとAdvanced RPN(128 Level)なのは取扱説明書を読んでいて気付きました)

3Dグラフを描く必要があるなら、
CAS必要→TI nSPIRE CX II CAS
　　　　　CASIO fx-CG50-N(Khicasを導入)
CAS不要→CASIO fx-CG50-N
でしょう。まぁ私は2Dグラフしか使いませんから、正直言って動作が速ければ良いです。ちなみに、2Dのみだったと思いますがTI-84 Plus CEは結構(動作も、時代の流れと比べても)遅いので注意が必要です。

あと、関数電卓ではよく見かける機能ですが、電卓単体でプログラミングが可能です。言語はHP-38GのHP-BASIC(で合ってるかな？)ベースの**HP PPL**(HP Prime Programming Language)です。この記事では便宜上PPLと呼びます。

なお、この機種は対抗機種のTI-nSPIREシリーズで、それら(と更に高性能な後継機種)に対抗すべくHP-39gII(CASなし)とHP-50G(CASあり)をベースに(外観や画質は39gIIに近い?)開発されたそうです。いや、高性能すぎでしょ。

## スペック
Prime G2のスペックです(G1から仕様が変わっています)。
| 項目 | 詳細 |
|-:|:-|
| CPU | ARM Cortex-A7(528MHz) |
| RAM | mDDR 256MB |
| ROM | 512MB |
| 電源 | USB Micro-B / Li-Po(3.7V=2000mAh) |
| 画面 | 320*240px 16bitフルカラーマルチタッチ液晶 |
| CASエンジン | Giac/Xcas |

CPUが一昔前のシングルボードコンピューター並です(初代ラズパイに近い？)。RAM/ROMも電卓としては非常に大容量です。ここから既に高性能であることが伺えますが、放熱はどうしているのでしょうか。分解レビュー者がアップしている画像だと、基板には絶縁のためカプトンテープが貼られているようです。(でも、1.2GHzクアッドA53でファンレス動作が一応できるからいけるのかな？)

## 購入
10月19日に購入し、佐川の国際便で輸送されてきました。アメリカ国内ではUSPS(アメリカ合衆国郵便公社)です。航空会社は特定できませんでしたが、ロサンゼルス国際空港(LAX)から成田国際空港(NRT)へ、そして陸送で届きました。

置き配拒否設定にしていたのですが、ヤマトじゃないので置き配される確率は限りなく低そうで、安心です(ヤマトは結構置き配してきます)。

そして10月25日、しっかり宅配ボックスに届けられていました(宅配ボックスOKの設定にしています)。

## 開封
HP Primeは日本で正式に発売されていない製品です。つまり、ブリスターパックで届きます。そしてそのブリスターパックは非常に硬いので、ハサミで切るのも大変なのです。上側一辺を切り取り、軍手をはめて、開きます。これ、意外と手が切れて危ないので軍手は必要だと思っています。

そして、本体を取り外し、ディスプレイ保護シートを剥がし、バッテリー絶縁タブを引き抜き、ONキーを押すとようこそ画面になります。

画面上のロックボタンをスライドして、初期設定を済ませ、使用開始します。

キーは浅く、パチパチといった様子のキーです。僕にとってこのキーは好みですが、かなり好き嫌いが分かれそうなキーです。

また、操作性は明らかに良いです。
![IMG_2173.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/8153a6c3-d870-015a-7712-cc2a460e9d93.png)
こんな画面です(これは便宜上エミュレータの画像です)。すげぇ(感動)

とりあえず最初に、本体のファームウェアアップデートをします。この時、`HP Connectivity Kit`という純正ソフトを用いるのですが、非常に操作が終わってます。正直言って本体の使いやすさからは想像できないほどの落胆を感じる操作性の悪さです。

電卓をUSBケーブルでPCと繋いで、上部のタブの`ヘルプ`から`更新の確認`を実行し、完了したら`電卓を更新`を押して更新します。まず、更新ボタンが分かりやすいところに無いのです。そして、`更新の確認`を行わないと、アップデートは無いと言われます。一括で探すことはできなかったんでしょうか…

若干イライラする操作性ですが、まぁアップデートできました。
![IMG_2222.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/6fc8df47-b0c9-2662-9522-a7fb92756d55.jpeg)
更新ファイルの移動中はこのような画面です。この画面の進捗バーが全て満たされると、自動的に再起動されて数十秒ほどで完了しました。

これで、投稿時点では最新のバージョン20240901(2024年9月1日リリースという意味です。そのままですね。)になりました。Pythonが使えるようになったり、ちょっと機能が増えたりします。しかし、電源ON時に強制的に計算画面に戻す機能は消して欲しくなかったなと思います。

Python機能は2章先で紹介します。

## PPLでのプログラミング
取扱説明書のプログラミングの章(80ページ程度)を見て、慣れない言語で簡単なコードを書いてきました。

```PPL:FIBGEN
EXPORT FIBGEN()
BEGIN  // <1>

MSGBOX("Press Esc to quit, and press again to exit.");
LOCAL FIB1:=0,FIB2:=1,TIME:=TICKS;

WHILE FIB2<9.99999999999E499 DO // <2>
FIB1+FIB2▶︎FIB1;
PRINT(FIB1);

IF ISKEYDOWN(4)==1 THEN // <3>
BREAK; //Escaping process
END; // </3>

FIB2+FIB1▶︎FIB2;
PRINT(FIB2);

IF ISKEYDOWN(4)==1 THEN // <4>
BREAK; //Escaping process
END; // </4>

END; // </2>
PRINT("Done. Time(ms);");
PRINT(TICKS-TIME);
END; // </1>
```

単純に処理可能な最大値までフィボナッチ数列を生成するコードです。最後の値はカンスト値なので実際の値ではありません。

コード中の`<1>`や`</1>`などの表記は、その行が同じ番号同士で対になっていることを意味しています(明らかに分かるところにもコメントしてあります)。

ここでの`FIB1+FIB2▶︎FIB1;`というのは`FIB1 = FIB1 + FIB2;`と同義です。PPLにおける`▶︎`は変数の代入を示す記号のようです。この時点でなかなか発狂したくなる言語です。「`=`キーがあるなら使えよ！」って思ってしまいます。これは`STO▶︎`という変数格納のキーが由来ですが、理解し難いです(そこまで言う？)。

とは言え割とそのままな文法です。ちなみに実行すると15秒程度で値を`9.99999999999E499`として生成がストップします(この電卓が扱える最大値であり、コードの実行を止める閾値でもあります)。内部タイマーは正確そうです。

これは電卓なので仕方ないといえば仕方ないのですが、シンタックスハイライトができません。できる電卓もあるので、実装されたら喜びます。

しかし関数カタログを見ている限りハードウェアの一部の操作(キー割り当ての変更やUSB通信など)もプログラミングできるようなので、遊んでみようかなと思います。

## Pythonでのプログラミング
前述の通り、ファームウェアをアップデートするとPythonが利用可能になります。

しかし、まだ翻訳が不完全で、ヘルプが表示できないものもあります。PPLがメインという印象です。最適化がされていないように思います。

そんなPython機能にも利点があります。Pythonで演算を実行すると本来の桁数制限を突破できます。具体的にはPrime本体の表示桁数の12桁を超える桁数を扱えます。整数値で見たところ、50桁は普通に扱えています。PPLでは高速に動かしたいプログラムを、Pythonでは独自のライブラリや桁数が必要な時に使用するというように使い分ければ良さそうです。

## ベンチマーク
PPで実行します。

```PPL:BENCHMARK.hpprgm
EXPORT BENCHMARK()
BEGIN

PRINT("Processing...");
LOCAL START:=TICKS,SUM:=0,INTEG:=1,CACHE:=0,TIME:=0;

FOR N FROM 1 TO 1500 DO
SIN(N)+COS(N)+0.5▶︎CACHE;
SUM+CACHE▶︎SUM;
INTEG*CACHE▶︎INTEG;
END;

TICKS-START▶︎TIME;

PRINT("");
PRINT("Done.");
MSGBOX(TIME);

END;
```

ここで悲報(?)です。どうやら`time`ライブラリが存在しないようです。実行時間の比較ができないみたいなので、Pythonでは作成しないことにします。また、`turtle`ライブラリも存在しないみたいです。今後のアップデートに期待ですね。

## エミュレータについて
HP PrimeにはiOS/iPadOS/Android/macOS/Windows/Linuxで動作可能なエミュレータが配布されています(現代のほとんど全てのOSで動作)。これがなかなかしっかり作り込まれています。スマホ版はPro/Liteで機能制限がありますが、PC版(私が試したのはWindows)では無料で全ての機能を使用できます。

電池残量がPCの電池残量表示に対応してたり、充電時のマークも表示されたり(ただし反映は遅い)、電卓上のShift/Alphaなどの特殊キーはキーボードのFunctionキーなどに対応していたりと、しっかり作り込まれていて、結構便利です。

CASエンジンが前述の通りGiac/Xcasであるためなのか、かなりパワフルなエミュレータです。PCで操作する分にはPCのキーボードで打って、どうしてもそれで打てない特殊文字だけエミュレータ上で入力して、あとは画面部分を操作すれば簡易的な数学ソフトとして使えそうです(Giac/Xcasを使えば良いと思うが)。

しかし、実機の操作感には勝てないのが現実です。

## 電卓として不安定な面
電卓というのは、本来はあくまで計算するツールですから、**計算の速度/計算の正確さ/キーの押しやすさ/画面の見やすさ**が重要です。計算の速度と画面の見やすさは大丈夫でしょう。キーの押しやすさは人によると思いますが僕の好みではあります。

しかし、重い計算(積分など)を実行すると最小桁の値が四捨五入を考慮してもしなくてもズレるのです。まぁ、別に第12位まで分からなくても良いので問題はないのですが。

内部の演算桁数の問題なのでしょうか。Primeは表示桁数と演算桁数の差がほとんどなかったと思います。その反面CASIO fx-JP900CWの演算桁数は23桁です。最終桁にエラーが出ても表示桁数の10桁にしたらかき消されるので、その面でも気に入っています(もう少し表示桁数を増やせという感情は否めない)。

しかし、ズレるだけならタチが良いのですが、フリーズします。そうなってしまうと、`Esc`を押してから再起動をかける他に手段はなさそうです。とは言え、他の電卓より短時間で解けるので、その点は我慢します。しかもそんな計算しませんし。しかし。フリーズした時にエラーを吐いて自動的に終了するシステムがあれば良いのになぁとも感じます。

## 表計算機能
グラフ電卓の中ではもうお決まりの事項ではありますが、表計算(スプレッドシート)機能があります。タッチパネルであることも相まって、結構使えます。また、処理速度も爆速なので前回のfx-JP900CWのようにイチイチ止まることはありません。何より、範囲がどこまで続くのかは知りません(分かりません)が、利用可能範囲はA~ZZ列,1~10000行(676*10000=6760000セルが利用可能)です。

ここで、前回の時の乱数生成とその確率(精度)を確認する表計算を実行してみましょう。前回のものはリンクからどうぞ。

https://qiita.com/bockring/items/1d55d7dd8fdfc0ed03f2#%E8%A1%A8%E8%A8%88%E7%AE%97%E3%81%A7%E4%B9%B1%E6%95%B0%E7%94%9F%E6%88%90%E3%81%AE%E7%B2%BE%E5%BA%A6%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B

明らかに速いです。というかそれは分かりきっていたので、Primeでは生成数を100個から1000個に増やして実行したのですが、全くもって遅延がありません。ストレスフリーです。また、その際のページめくりも指で可能なので、非常に楽です。

また、`"`で文字列を括ることで任意の文字列を挿入できます。ほぼExcelやん。

## 試験モード
この電卓には試験モードがあります。海外ではテストに使えるので、その時の機能制限をするための機能です。日本では使わない機能ですが、一応紹介します。

このモードには
- 基本モード
- カスタムモード

の2種類のモードがあり、カスタムモードでは時間制限や機能制限など、細かく設定できます。基本モードは、今までの履歴やファイルを非表示にしているだけなので、しかもパスコードで解除できません。こりゃ困った。PCに接続しないといけないのです。

まぁ、カスタムモードを上手に利用すれば本体のロックにも流用できそうですが、電卓をロックす必要性は皆無です。

基本モードに使い道はほとんど無さそうです。カスタムモードの使用は現実的だと思います。しかし、不用意にONにするとPCを起動しないといけなくなるので、注意しましょう。

## なんとも言えない付加機能
この電卓は非常に良くできた製品なのですが、一貫してソースの作り込みが最後の最後で甘い部分があるのです。また、「これあっても言う程使うか？」的な機能もあります。まぁ、ROMが512MBと余裕があるからできるんでしょうね(512MBと言うと、RAM換算なら最低限GUIのLinuxが起動する程度)。

その一つが文字コード入力なのですが、これはWindowsの「文字コード表」ソフトと概念は似ています。さぁ、これを使ったことある方がどれ程いるのでしょうか。ほとんど居ないと思います。それでなんとか日本語入力ができますと言われても、使うわけがありません。せいぜい最上部の`?`や`@`程度かと思います

## おわりに
なかなか面白い電卓でした。使っていてストレスにならない動作の速さ、タッチ感度も良いカラーディスプレイ、(中略)と、ハードウェア的な文句はほぼ無しです。

その唯一のハードウェアの文句というのがキーの配置です。というかALPHA/alphaの文字入力モード時、配列的に打ちにくいのです。
![IMG_2189.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777721/0b903a69-f76f-d857-aa1c-f16f8aff374d.jpeg)
Enterキーが大きいので、Enterキー常にALPHA/alphaモード時の文字列を配置できません。しかも同じサイズであってもバックスペースキー上に文字の配置はありません。アルファベット順に並べて6つずつに区切ったキーとは操作性がまるで違うのです。(無論、Enterキーが大きいのは打ちやすいので良いです。)

これに関してはNumWorksの方が優秀です。ちゃんと6つずつで並んでいます。エミュレータを使用しても打ちやすかったです。ただしNumWorksにも難があると思いますが。

全体的によく作り込まれた製品だと思います。高機能化の代償で一部キーが裏に回っていますが、仕方ないと思える範囲なのでこれからガッツリ使い込んでいきます。

それではまた〜