電卓ベンチマーク (1) プログラム関数電卓編1
これまでプログラム関数電卓コレクションを紹介してきましたが、ここらへんで一度性能比較のため、簡単なベンチマークを行ってみることにしました。今回は、グラフ機能を持たないプログラム関数電卓で整数演算・ループ計算の速度を比較してみることにします。他のポケコンなどと比較しやすいように、今回はUP-Cさんのサイトに掲載されている、1~1000までの整数を加算するプログラムを作ってみました。
1. CASIO FX-603P
この機種はUP-Cさんに掲載されているプログラムをそのまま使用しました。
リストは以下のとおりです。
P0
0 Min01
1000 Min00
LBL1
MR00 M+01
DSZ GOTO1
MR01
実行はRUNモードで[P0]です。所要時間は19.1秒でした。

2. CASIO fx-360MT
この機種はプログラムエリアが1つだけであり、条件ジャンプはプログラム先頭に戻ることしかできません。したがって、実行前に変数の初期値を手入力してやる必要があります。プログラムリストは下記のとおりです。
MR Kin+ 1
1 M-
x≦M
Kout 1
実行はRUNモードで[SHIFT][KAC]1000[SHIFT][Min][RUN]としてください。所要時間は73.5秒でした。

3. CASIO fx-3600Pv
この機種のプログラム言語はfx-360MTとほぼ同じです。そこで最初はプログラムも同じものを使おうとしたのですが、なぜか正しい結果が出ませんでした。10~1までのループにしてMメモリの内容を追ってみると…。
10→89→78→67→56→45→34→23→12→1 …
なんじゃこれは?って感じですね。Mメモリからは1ずつ減算されるはずなのに、なぜかめちゃくちゃです。そこで、次は"1 M-"を"- 1 = Min"に、"x≦M"を"1 x≦M"に変更すると、今度はオーバーフローしてエラーで止まってしまいます。同様に10~1までのループにしてMメモリの内容を追ってみると…。
10→89→888→8887→88886→888885→ …
これまたなんじゃこりゃって感じですね。やっていることは上と同じはずなのですが…。この機種にはループ計算にバグがあるようで、これでは全く使い物になりません。(下記の通り"x≦M"命令の動作が怪しいのですが、fx-3600Pvのマニュアルに載っている"x≦M"を使用したサンプルプログラムは正常動作するので、故障ではないと思っています…)
仕方がないので、条件分岐に"x≦M"を使用するのを止めて"x>0"を使用するようにすると正常動作するようになりました。そのリストが下記の通りです。(ステップ数は長くなってしまいました)
P2
KAC
1000 Min
P1
MR Kin+ 1
- 1 = Min
x>0
Kout 1
実行はRUNモードで[P2][P1]です。所要時間は75.2秒でした。

4. HP-15C Limited Edition
HPの4レベルRPN電卓はFX-603Pとプログラム言語の文法が似ています。もちろん細かい違いはありますが、おおまかには計算式がRPNか代数記法かの程度の違いしかありません。なので、FX-603PからはHP-15Cの同等の命令に置き換えるだけで簡単に移植ができました。リストは以下のとおりです。
LBL A
0 STO 1
1000 STO 0
LBL 1
RCL 0 ST+ 1
DSE 0 GTO 1
RCL 1
RTN
実行はRUNモードで[f][A]です。所要時間は3.0秒でした。(速っ!!)

実行中は"running"と表示されます。点滅するうえ一瞬なのでなかなかうまく撮れませんが…。

5. SHARP EL-566E
この機種はSHARPの典型的なAER言語を搭載しています。CASIOの機種などと異なり、プログラムの途中に[=]を入力することができない([=]キーはプログラム入力完了を意味する)ので、一つ一つの計算が終わったら" "(スペース)で区切る必要があります。また、STO命令(⇒)は、CASIOのMinやHPのSTOと異なり、それまでの計算式を実行する([=]を操作するのと同じ)となっているので注意が必要です。プログラムリストは下記のとおりですが、必ず改行の部分でスペースを入れてください。(改行以外の部分では見やすくするためにスペースを入れていますが、実際には入力しないでください)
1:
1⇒A
0⇒M
↳ A M+
A + 1 ⇒A
1000 ≧ A ■Y→[ ↰ ] M
実行はNORMALモードで[ALPHA][1:]です。所要時間は24.2秒でした。

実行中は"calculating..."と表示されます。

6. SHARP EL-5020
この機種もSHARPのAERで、EL-566Eに似てはいますが、ジャンプや条件判断の命令が簡略化されています。初出の変数名があると入力を求める仕様のため、実行時に初期値を入力する必要があります。プログラムリストは下記のとおりですが、EL-566Eと同様に必ず改行の部分でスペースを入れてください。(改行以外の部分では見やすくするためにスペースを入れていますが、実際には入力しないでください)
1:
A + M STO A
1 M+
1000 x≧M
A
実行はNORMALモードで[2ndF][1:]です。A?に対して0, M?に対して1を入力してください。
入力完了後の所要時間は85.1秒でした。

やはり最新のARMプロセッサ搭載のHP-15C LEはダントツに速いですね。次点が当時は高級プログラム電卓であったFX-603P、3位が現行機種であるEL-566Eとなりました。fx-360MT, fx-3600Pv, EL-5020はあまりにも遅すぎです。これらのエントリクラスのプログラム関数電卓はプログラム言語自体機能制限が多いですし、複雑な計算には向かないということなのでしょうか。
こうしていろいろな機種でプログラムを作ってみると、一見同等と思える命令も微妙に動作が異なっていたりするので、結構戸惑いますね。自分的には古くから使い慣れているFX-601P/603Pの言語が最もしっくりきたりします。実行モードとプログラムモードでのキー操作の違いが最小限に抑えられており、プログラム中で普通に[AC]やら[=]やらが入力でき、式やステートメントの区切りなどを気にする必要もないので理解しやすいと思います。逆にSHARPのAERでは[=]が入力できない(実際には[:]などで代用する)こと、きちんと式を区切らなければいけないことに気づかず、こんな短いプログラムでも最初はエラーばかり出していました(汗)。FX-601P/603Pに比べるときちんと説明書を読んで覚えなければいかないことが多いように思いますね。
他に紹介したプログラム関数電卓としては、EL-5002とEL-5103がありましたが、これらの電卓ではループ、ジャンプなどの命令がないため今回のベンチマークプログラムを移植することはできませんでした。次の機会にはグラフ電卓編、浮動小数点演算編などもやってみたいと思います。
※fx-3600Pvの動作異常についての報告を探しています。上記のプログラムの動作状況、またこれと近いfx-3600P/3800Pでの状況も教えていただけるとうれしいです。私のようにfx-3600Pvでループ計算の結果がおかしいと思われた場合は、"x≦M"を使うのを止めて"x>0"を使うように変更するのも一つの方法だと思います。
この2機種は現在でも購入可能です。EL-566Eは価格も安くそこそこ高性能なのでお勧めです。
1. CASIO FX-603P
この機種はUP-Cさんに掲載されているプログラムをそのまま使用しました。
リストは以下のとおりです。
P0
0 Min01
1000 Min00
LBL1
MR00 M+01
DSZ GOTO1
MR01
実行はRUNモードで[P0]です。所要時間は19.1秒でした。

2. CASIO fx-360MT
この機種はプログラムエリアが1つだけであり、条件ジャンプはプログラム先頭に戻ることしかできません。したがって、実行前に変数の初期値を手入力してやる必要があります。プログラムリストは下記のとおりです。
MR Kin+ 1
1 M-
x≦M
Kout 1
実行はRUNモードで[SHIFT][KAC]1000[SHIFT][Min][RUN]としてください。所要時間は73.5秒でした。

3. CASIO fx-3600Pv
この機種のプログラム言語はfx-360MTとほぼ同じです。そこで最初はプログラムも同じものを使おうとしたのですが、なぜか正しい結果が出ませんでした。10~1までのループにしてMメモリの内容を追ってみると…。
10→89→78→67→56→45→34→23→12→1 …
なんじゃこれは?って感じですね。Mメモリからは1ずつ減算されるはずなのに、なぜかめちゃくちゃです。そこで、次は"1 M-"を"- 1 = Min"に、"x≦M"を"1 x≦M"に変更すると、今度はオーバーフローしてエラーで止まってしまいます。同様に10~1までのループにしてMメモリの内容を追ってみると…。
10→89→888→8887→88886→888885→ …
これまたなんじゃこりゃって感じですね。やっていることは上と同じはずなのですが…。この機種にはループ計算にバグがあるようで、これでは全く使い物になりません。(下記の通り"x≦M"命令の動作が怪しいのですが、fx-3600Pvのマニュアルに載っている"x≦M"を使用したサンプルプログラムは正常動作するので、故障ではないと思っています…)
仕方がないので、条件分岐に"x≦M"を使用するのを止めて"x>0"を使用するようにすると正常動作するようになりました。そのリストが下記の通りです。(ステップ数は長くなってしまいました)
P2
KAC
1000 Min
P1
MR Kin+ 1
- 1 = Min
x>0
Kout 1
実行はRUNモードで[P2][P1]です。所要時間は75.2秒でした。

4. HP-15C Limited Edition
HPの4レベルRPN電卓はFX-603Pとプログラム言語の文法が似ています。もちろん細かい違いはありますが、おおまかには計算式がRPNか代数記法かの程度の違いしかありません。なので、FX-603PからはHP-15Cの同等の命令に置き換えるだけで簡単に移植ができました。リストは以下のとおりです。
LBL A
0 STO 1
1000 STO 0
LBL 1
RCL 0 ST+ 1
DSE 0 GTO 1
RCL 1
RTN
実行はRUNモードで[f][A]です。所要時間は3.0秒でした。(速っ!!)

実行中は"running"と表示されます。点滅するうえ一瞬なのでなかなかうまく撮れませんが…。

5. SHARP EL-566E
この機種はSHARPの典型的なAER言語を搭載しています。CASIOの機種などと異なり、プログラムの途中に[=]を入力することができない([=]キーはプログラム入力完了を意味する)ので、一つ一つの計算が終わったら" "(スペース)で区切る必要があります。また、STO命令(⇒)は、CASIOのMinやHPのSTOと異なり、それまでの計算式を実行する([=]を操作するのと同じ)となっているので注意が必要です。プログラムリストは下記のとおりですが、必ず改行の部分でスペースを入れてください。(改行以外の部分では見やすくするためにスペースを入れていますが、実際には入力しないでください)
1:
1⇒A
0⇒M
↳ A M+
A + 1 ⇒A
1000 ≧ A ■Y→[ ↰ ] M
実行はNORMALモードで[ALPHA][1:]です。所要時間は24.2秒でした。

実行中は"calculating..."と表示されます。

6. SHARP EL-5020
この機種もSHARPのAERで、EL-566Eに似てはいますが、ジャンプや条件判断の命令が簡略化されています。初出の変数名があると入力を求める仕様のため、実行時に初期値を入力する必要があります。プログラムリストは下記のとおりですが、EL-566Eと同様に必ず改行の部分でスペースを入れてください。(改行以外の部分では見やすくするためにスペースを入れていますが、実際には入力しないでください)
1:
A + M STO A
1 M+
1000 x≧M
A
実行はNORMALモードで[2ndF][1:]です。A?に対して0, M?に対して1を入力してください。

入力完了後の所要時間は85.1秒でした。

やはり最新のARMプロセッサ搭載のHP-15C LEはダントツに速いですね。次点が当時は高級プログラム電卓であったFX-603P、3位が現行機種であるEL-566Eとなりました。fx-360MT, fx-3600Pv, EL-5020はあまりにも遅すぎです。これらのエントリクラスのプログラム関数電卓はプログラム言語自体機能制限が多いですし、複雑な計算には向かないということなのでしょうか。
こうしていろいろな機種でプログラムを作ってみると、一見同等と思える命令も微妙に動作が異なっていたりするので、結構戸惑いますね。自分的には古くから使い慣れているFX-601P/603Pの言語が最もしっくりきたりします。実行モードとプログラムモードでのキー操作の違いが最小限に抑えられており、プログラム中で普通に[AC]やら[=]やらが入力でき、式やステートメントの区切りなどを気にする必要もないので理解しやすいと思います。逆にSHARPのAERでは[=]が入力できない(実際には[:]などで代用する)こと、きちんと式を区切らなければいけないことに気づかず、こんな短いプログラムでも最初はエラーばかり出していました(汗)。FX-601P/603Pに比べるときちんと説明書を読んで覚えなければいかないことが多いように思いますね。
他に紹介したプログラム関数電卓としては、EL-5002とEL-5103がありましたが、これらの電卓ではループ、ジャンプなどの命令がないため今回のベンチマークプログラムを移植することはできませんでした。次の機会にはグラフ電卓編、浮動小数点演算編などもやってみたいと思います。
※fx-3600Pvの動作異常についての報告を探しています。上記のプログラムの動作状況、またこれと近いfx-3600P/3800Pでの状況も教えていただけるとうれしいです。私のようにfx-3600Pvでループ計算の結果がおかしいと思われた場合は、"x≦M"を使うのを止めて"x>0"を使うように変更するのも一つの方法だと思います。
この2機種は現在でも購入可能です。EL-566Eは価格も安くそこそこ高性能なのでお勧めです。
スポンサーサイト
tag : プログラム関数電卓ベンチマークFX-603Pfx-360MTfx-3600PvHP-15CEL-566EEL-5020