[戻る]
2017年5月29日初公開

電卓ベンチマーク02(三角関数を含んだ式の積分)

The expression of sum01

各電卓で上式の計算を行い、その計算にかかる時間を測定しました。
bの値は、10, 10^2, 10^3, 10^4 の4つです。それぞれの値で測定を行いました。

目次

  1. 数式の意味
  2. 測定方法
  3. CAS搭載電卓の測定について
  4. SHARP EL-5160J-X の積分計算について
  5. 測定結果(SHARP EL-5160J-X以外)
  6. 測定結果(SHARP EL-5160J-Xのみ)
  7. 測定して気がついたこと

数式の意味

測定方法

CAS搭載電卓の測定について

CAS(数式処理システム)搭載電卓は通常操作において、超越関数や数学定数(π,eなど)を数値化しません。そのため、特殊な操作をしたり、設定を変更する必要があります。

SHARP EL-5160J-X の積分計算について

SHARP EL-5160J-X の積分計算は「シンプソン法」という古い方法で行われています(後継機種の EL-5160T-X も同様)。 他社は「ガウス=クロンロッド法」というさらに進んだ積分計算方法を使っています。

しかも EL-5160J-X のシンプソン法は積分区間の長さを全く考慮してくれません。 積分区間がどんなに広くても、分割数を指定しないときは、デフォルトの100分割になります。

そのため、積分区間が広い場合、手動で分割数を指定する必要があります。 分割数を増やしたいときは、積分式のdxの前に分割数を指定します。「,分割数dx」という書式です。 その様子は「SHARP EL-5160J-X 画像集」をご覧ください。

このように他の機種と公平な比較にならないため、別の表として結果をまとめます。

(注意) Canon F-789SG の説明書の日本語部分に「シンプソンの公式」と書かれていますが、英語部分には "Gauss-kronrod method"(ガウス=クロンロッド法)と書かれています。 間違いなく英語部分の記述が正しいと思われます。 F-789SG の積分計算方法は、計算時間と計算精度からして「ガウス=クロンロッド法」に間違いないでしょう。

測定結果(SHARP EL-5160J-X以外)

この結果は特定の数式における結果であり、この結果だけで電卓の性能を判断しないでください。

参考値としてwxMaxima(PC用数式処理ソフト)の計算結果(16桁)を使っています。参考値がどの桁まで正確なのかよく分かりませんが、ここで扱う電卓よりも高精度なのは間違いないと思われます。

参考値と異なる計算結果の一部は赤字にします。四捨五入を考慮して赤字にします。
例えば、参考値が1.235のとき、計算結果が1.23ならば、1.23として、3を誤りとします。この場合、四捨五入を考慮して1.24が正解とします。


b = 10

参考値(wxMaximaによる): 50.567411541905

機種名 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
HP Prime (Home表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 50.5674115419(12桁) 1秒未満 Home表示=CASなしモード
HP Prime (CAS表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 50.5674115419(12桁) 1秒未満 Exact:ON,Complex:OFF
TI-Nspire CX CAS グラフ電卓(CAS有) 4.3.0.702 50.5674115419(12桁) 1秒未満 Calculation Mode:Auto, 最大12桁表示に設定
CASIO fx-CG10 グラフ電卓(CAS無) 02.02.3211 50.56741154(10桁) 1秒未満 fx-CG20同等品
CASIO fx-9750GII グラフ電卓(CAS無) 02.04.0701 50.56741154(10桁) 1秒未満
CASIO fx-9860GII グラフ電卓(CAS無) 02.09.0201 50.56741154(10桁) 1秒未満
TI-84 Plus CE グラフ電卓(CAS無) 5.2.2.0043 50.56741154(10桁) 2秒
CASIO fx-JP900 関数電卓 不明 50.56741154(10桁) 5秒
TI-36X Pro 関数電卓 不明 50.56741154(10桁) 5秒
HP 50g グラフ電卓(CAS有) 2.15 50.5674115419(12桁) 11秒 Approx:ON,Complex:OFF
TI-89 Titanium グラフ電卓(CAS有) 3.10 50.5674115419(12桁) 12秒 Exact/Approx:AUTO,最大12桁表示に設定
Canon F-789SG 関数電卓 不明 50.56741154(10桁) 14秒
CASIO fx-915ES 関数電卓 不明 50.56741154(10桁) 23秒
CASIO fx-375ES 関数電卓 不明 50.56741154(10桁) 23秒

b = 10^2

参考値(wxMaximaによる): 4862.487501891434

機種名 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
HP Prime (Home表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 4862.48750189(12桁) 1秒未満 Home表示=CASなしモード
HP Prime (CAS表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 4862.48750189(12桁) 1秒未満 Exact:ON,Complex:OFF
TI-Nspire CX CAS グラフ電卓(CAS有) 4.3.0.702 4862.48750189(12桁) 4秒 Calculation Mode:Auto, 最大12桁表示に設定
CASIO fx-CG10 グラフ電卓(CAS無) 02.02.3211 4862.487502(10桁) 5秒 fx-CG20同等品
CASIO fx-9750GII グラフ電卓(CAS無) 02.04.0701 4862.487502(10桁) 6秒
CASIO fx-9860GII グラフ電卓(CAS無) 02.09.0201 4862.487502(10桁) 6秒
TI-84 Plus CE グラフ電卓(CAS無) 5.2.2.0043 4862.487502(10桁) 12秒
CASIO fx-JP900 関数電卓 不明 4862.487502(10桁) 36秒
HP 50g グラフ電卓(CAS有) 2.15 4862.48750189(12桁) 44秒 Approx:ON,Complex:OFF
TI-36X Pro 関数電卓 不明 4862.487502(10桁) 45秒
TI-89 Titanium グラフ電卓(CAS有) 3.10 4862.48750189(12桁) 2分1秒 Exact/Approx:AUTO,最大12桁表示に設定
Canon F-789SG 関数電卓 不明 4862.487502(10桁) 2分7秒
CASIO fx-915ES 関数電卓 不明 4862.487502(10桁) 2分56秒
CASIO fx-375ES 関数電卓 不明 4862.487502(10桁) 2分57秒

b = 10^3

参考値(wxMaximaによる): 500264.8897228584

機種名 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
HP Prime (Home表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 500264.889723(12桁) 1秒 Home表示=CASなしモード
HP Prime (CAS表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 500264.889723(12桁) 1秒 Exact:ON,Complex:OFF
TI-Nspire CX CAS グラフ電卓(CAS有) 4.3.0.702 500264.889722(12桁) 25秒 Calculation Mode:Auto, 最大12桁表示に設定
CASIO fx-CG10 グラフ電卓(CAS無) 02.02.3211 500264.8897(10桁) 38秒 fx-CG20同等品
CASIO fx-9750GII グラフ電卓(CAS無) 02.04.0701 500264.8897(10桁) 48秒
CASIO fx-9860GII グラフ電卓(CAS無) 02.09.0201 500264.8897(10桁) 49秒
HP 50g グラフ電卓(CAS有) 2.15 500264.889728(12桁) 2分59秒 Approx:ON,Complex:OFF
CASIO fx-JP900 関数電卓 不明 500264.8897(10桁) 4分45秒
Canon F-789SG 関数電卓 不明 500264.8897(10桁) 15分25秒
TI-89 Titanium グラフ電卓(CAS有) 3.10 500264.889722(12桁) 15分37秒 Exact/Approx:AUTO,最大12桁表示に設定
CASIO fx-915ES 関数電卓 不明 500264.8897(10桁) 23分18秒
CASIO fx-375ES 関数電卓 不明 500264.8897(10桁) 23分31秒
TI-84 Plus CE グラフ電卓(CAS無) 5.2.2.0043 ERROR: TOLERANCE NOT MET 「エラー:許容誤差を満たせない」の意
TI-36X Pro 関数電卓 不明 MEMORY LIMIT Error 「メモリ上限エラー」の意。つまりメモリ不足。

b = 10^4

参考値(wxMaximaによる): 50006463.15202395

機種名 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
HP Prime (Home表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 50006463.152(11桁) 11秒 Home表示=CASなしモード
HP Prime (CAS表示) グラフ電卓(CAS有無両用) 2016 08 29 (10637) 50006463.152(11桁) 11秒 Exact:ON,Complex:OFF
TI-Nspire CX CAS グラフ電卓(CAS有) 4.3.0.702 50006463.152(11桁) 3分29秒 Calculation Mode:Auto, 最大12桁表示に設定
CASIO fx-CG10 グラフ電卓(CAS無) 02.02.3211 50006463.15(10桁) 5分1秒 fx-CG20同等品
CASIO fx-9750GII グラフ電卓(CAS無) 02.04.0701 50006463.15(10桁) 6分22秒
CASIO fx-9860GII グラフ電卓(CAS無) 02.09.0201 50006463.15(10桁) 6分35秒
HP 50g グラフ電卓(CAS有) 2.15 50006463.1518(12桁) 24分10秒 Approx:ON,Complex:OFF
TI-89 Titanium グラフ電卓(CAS有) 3.10 50006463.152(11桁) 2時間19分29秒 Exact/Approx:AUTO,最大12桁表示に設定
TI-84 Plus CE グラフ電卓(CAS無) 5.2.2.0043 ERROR: TOLERANCE NOT MET 「エラー:許容誤差を満たせない」の意
CASIO fx-JP900 関数電卓 不明 タイムアウトになりました 許容誤差範囲は10^-5(デフォルト)
TI-36X Pro 関数電卓 不明 MEMORY LIMIT Error 「メモリ上限エラー」の意。つまりメモリ不足。
Canon F-789SG 関数電卓 不明 Time out 許容誤差範囲はデフォルト(数は不明)
CASIO fx-915ES 関数電卓 不明 Time out 許容誤差範囲は10^-5(デフォルト)
CASIO fx-375ES 関数電卓 不明 Time out 許容誤差範囲は10^-5(デフォルト)

測定結果(SHARP EL-5160J-Xのみ)

この結果は特定の数式における結果であり、この結果だけで電卓の性能を判断しないでください。

各bの値(10, 10^2, 10^3, 10^4)に対して、分割数を100(デフォルト), 10^3, 10^4の順番に増加させて正しい値が出るまで続けます。
ただし、分割数を10^5にすると12時間以上の計算時間がかかると予想されるので、分割数は10^4までにします。

参考値と異なる計算結果の一部は赤字にします。四捨五入を考慮して赤字にします。
例えば、参考値が1.235のとき、計算結果が1.23ならば、1.23として、3を誤りとします。この場合、四捨五入を考慮して1.24が正解とします。

b = 10

参考値(wxMaximaによる): 50.567411541905

機種名(分割数) 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
SHARP EL-5160J-X(100分割) 関数電卓 不明 50.56741189(10桁) 44秒
SHARP EL-5160J-X(10^3分割) 関数電卓 不明 50.56741154(10桁) 7分17秒

b = 10^2

参考値(wxMaximaによる): 4862.487501891434

機種名(分割数) 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
SHARP EL-5160J-X(100分割) 関数電卓 不明 4862.439231(10桁) 45秒
SHARP EL-5160J-X(10^3分割) 関数電卓 不明 4862.487497(10桁) 7分24秒
SHARP EL-5160J-X(10^4分割) 関数電卓 不明 4862.487502(10桁) 1時間14分22秒

b = 10^3

参考値(wxMaximaによる): 500264.8897228584

機種名(分割数) 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
SHARP EL-5160J-X(100分割) 関数電卓 不明 498955.6899(10桁) 45秒
SHARP EL-5160J-X(10^3分割) 関数電卓 不明 500264.9839(10桁) 7分28秒
SHARP EL-5160J-X(10^4分割) 関数電卓 不明 500264.8897(10桁) 1時間14分53秒

b = 10^4

参考値(wxMaximaによる): 50006463.15202395

機種名(分割数) 種別 ファームウェア
バージョン
計算結果(桁数) 計算時間 備考
SHARP EL-5160J-X(100分割) 関数電卓 不明 48702216.67(10桁) 45秒
SHARP EL-5160J-X(10^3分割) 関数電卓 不明 49974305.81(10桁) 7分30秒
SHARP EL-5160J-X(10^4分割) 関数電卓 不明 50006465.47(10桁) 1時間15分23秒

測定して気がついたこと

HP Prime の突出した計算速度の速さ

前回の測定でも HP Prime の計算速度はダントツの速さでしたが、CAS表示の動作が不安定でした。 しかも12桁表示にも関わらず、末尾の2桁は誤差が多くて信頼性がないものでした。

ところが、今回はCAS表示も安定して動作しており、精度も問題ありません。計算速度は前回同様に高速です。 その速さは HP Prime に搭載されている ARM9 400 MHz の性能だけでは説明できません。 なぜなら TI-Nspire CX CAS も ARM9 132MHz (150MHz説もある)を搭載しているので、クロック周波数は3倍程度の差にすぎません。 それなのに b=10^4 のときの計算速度は HP Prime の方が約19倍も速いのです。 仮に HP Prime の ARM9プロセッサのキャッシュメモリとTCM(スクラッチパッドメモリ)が TI-Nspire CX CAS のそれよりも多かったとしてもここまで差が出るとは思えません。
おそらくは積分計算のアルゴリズムの違いやOSの構造の違い(TI-Nspire CX CAS の方が複雑なOSを搭載していて速度的に不利)が原因でしょう。

ただし、前回の測定のように HP Prime は不安定な動作をすることもあり、速ければいいというものでもありません。


EL-5160J-X のシンプソン法による積分計算は実用性がない

EL-5160J-X は2011年8月に発売されたものです。その時代でもシンプソン法による積分計算は時代遅れでした。
それよりも2年以上古い CASIO fx-993ES(ヨドバシ.comによると2009年2月発売)でもガウス=クロンロッド法で積分を行なっていました。

今回測定した機種の中で最も古くから発売されている TI-89 Titanium(2004年発売)は積分の計算方法が公表されていませんが、おそらくシンプソン法を使っていないでしょう。 シンプソン法の場合、ガウス=クロンロッド法と違って誤差推定ができないので、分割数を自動的に設定するのは困難です。 しかし、TI-89 Titanium は分割数を利用者に要求しないのにほとんど場合で正確な結果を出しますので、シンプソン法ではないでしょう。

EL-5160J-X の測定結果を見る限り、今回の数式において分割幅が0.1のときは正確な結果を出すようです。
分割幅=積分区間/分割数 ですので、積分区間が長くなるほど分割数を増やす必要があります。 そのため、シンプソン法で正確な値を出すには長い計算時間がかかります。 b=10のときですら正確な計算をするのに7分17秒(分割数10^3のとき)もかかっています(分割数を101~999の間で調整して時間短縮できる可能性はあるが、そうしても他機種よりはかなり遅いだろう)。
EL-5160J-X 以外の機種で最も計算速度の遅い CASIO fx-375ES ですら b=10 のときに23秒で正確な値を出しています。

それ以前の問題として、電卓の利用者からすると、分割数をいくらにすれば正確な値が出るのか知りようがありません。 今回のようにwxMaximaの結果などと比較しないと適切な分割数が分からないのです。 つまり、EL-5160J-X の積分計算に実用性はないのです。

非常に残念なことに後継機種の EL-5160T-X(2016年10月発売)ですら積分計算は進化しておらず、シンプソン法のままです。 経営破綻で鴻海精密工業に買収されたシャープにもはや関数電卓のファームウェアを改良する力はないのかもしれません。


許容誤差範囲(tol)の設定を変えてタイムアウトを回避できるか?

今回の測定では、b=10^4のときにCASIO fx-375ES, fx-915ES, fx-JP900, Canon F-789SG の4機種がタイムアウトエラーを出しています。
しかし、fx-JP900の説明書によると、タイムアウトエラーの説明は
「微分または積分計算にて、解が終了条件を満たしていない。」
ということになっています。 fx-315ES/915ESとF-789SGの説明書にも同じようなことが書かれています。

この説明はタイムアウトしたときに「解が終了条件を満たしていない」という意味でしょうか。 それとも「解が終了条件を満たしそうにない」ので、タイムアウトしたことにしたのでしょうか。

fx-JP900 の説明書にはタイムアウトの対応策として、
「tol値(許容誤差範囲)を現在の値より大きくすることで、求解条件を緩めて試してみる。ただしこのとき、求解精度は落ちます。」
と書かれています。

前述の4機種は教科書表示入力からライン表示入力に切り替えると、ガウス=クロンロッド法で使う許容誤差範囲を設定できます。 この値は計算結果に対する許容誤差範囲ではなく、計算過程で使う許容誤差範囲のようですが、詳細は説明書に書かれていません。 おそらくは積分区間を細かく分割して、それぞれの分割された区間にガウス=クロンロッド法を適用した時の許容誤差範囲という意味かもしれませんが、私にはよく分かりません。

そこで、fx-JP900の許容誤差範囲をデフォルトの10^-5から大きくしてどのようになるのか試して見ました。 許容誤差範囲を指定するためにライン表示入力にしないといけないので、数式は ∫(X*(sin(X)+cos(X)+1), 0, 10000, 許容誤差範囲 ) となります。これは他の3機種でも一緒です。

許容誤差範囲をかなり大きくすると、タイムアウトしなくなりましたが、計算精度は大幅に悪化しています。
b=10^4のときの参考値(wxMaximaによる)は50006463.15202395であり、許容誤差範囲=10^-1のときは計算になっていないのです。 結局のところ、許容誤差範囲(tol)の設定を変えても意味のない数値が出るだけでした。 fx-375ES, fx-915ESでも完全に同じ動作でした。

一方、Canon F-789SG は異なる動作をします。

結局、F-789SGでも答えになっていない酷い結果が出るだけでした。

どうやら許容誤差範囲の設定変更はあまり意味がないようです。 許容誤差範囲の設定変更でタイムアウトを解決できる場合もあるのかもしれませんが、メーカー自ら「ただしこのとき、求解精度は落ちます。」と宣言しているので、無理にやることもない気がします。 デフォルト設定で積分計算してタイムアウトになった時点で余計なことはしない方が良いようです。


bの値によってHP 50gの順位が変動する

HP 50gは、b=10 と b=10^2 のとき CASIO fx-JP900 よりも計算時間がかかります。 しかし、b=10^3 と b=10^4 のときは計算時間で逆転しています。 積分区間が長いと HP 50g の方が有利になるようです。 CASIO fx-JP900のページで行なったような簡易な実験で性能を決めつけてはいけないということがよく分かります。

とはいえ、単4電池4本で動作する HP 50g に対して、太陽電池とLR44ボタン電池1個しか搭載していない fx-JP900 が一部条件下で勝っているのは特筆するべきことでしょう。

別の視点で見ると、HP 50g は ARM CPU 75MHz 上で動作する Saturn CPU エミュレータが相当な足かせになっているとも言えます。


CASIO fx-375ES と fx-915ES のわずかな計算時間の差について

前回、fx-375ES と fx-915ES の計算時間の差が0.4%だったので、「セラミック発振子の個体差ではないか?」と書いたのですが、今回はb=10^3のときに0.9%程度の差が出ています。 セラミック発振子は±0.5%程度の周波数許容偏差があるので、その幅は1.0%です。 ですから0.9%の差はあり得なくはないことですが、セラミック発振子の偏差が前回からこんなに変化するものなのかどうかよく分かりません(温度条件は多少異なったと思えるが、室温を記録していない)。

前回も書いたのですが、これらの電卓にセラミック発振子が使われているのかどうかすら私には分かりません。 あくまでも推測ですので、ご了承下さい。



[戻る]