楽屋裏 - Casio Basic のグラフィックス プログラミング

楽 屋 裏
e-Gadget

修正 2015/06/24

fx-9860GII は、グラフィックス表示が可能で、fx-5800P には無い楽しさや利便性があります。

以前、簡単に触れました;
楽屋裏 - Casio Basic のグラフィックス描画

fx-9860GII は、グラフ関数電卓の名の通り、数学の学習を主な用途として考えられていて、数式やデータからグラフの描画、変換、比較などを行える各種機能があります。つまり、PCなどで使うプログラミング言語のグラフィックス機能とは、少し方向性が違います。それは、Casio Basic 、特にグラフィックスのコマンド仕様に反映されています。



fx-9860GIIグラフィックス コマンド

fx-5800P の取扱説明書は、Casio Basic のコマンドの説明があまり親切ではありませんが、ほぼ全てのコマンドが簡単な説明付で掲載されています(行列だけが例外と言えます)。

ところが、fx-9860GII の取扱説明書には、実際に機能が搭載されているのに取扱説明書に説明のないコマンドがかなり多くあります。グラフィックス関係のコマンドもそうです。

なお、電卓本体には、[SHIFT] [4] (CATALOG) キーがあり、ここでは全コマンド類が全て含まれています。このリストを手がかりに、色々調べてみようと思っています。


さて、よく使いそうなグラフィックス関係のコマンドは、主に以下のメニューにあります。
・設定コマンド: [SHIFT] [MENU] (SET UP) 
・描画コマンド: [SHIFT] [F4] (Sketch) 
・座標設定: [SHIFT] [F3] (V-Window)
・グラフィックス消去: [SHIFT] [VARS] [F6] (▷) [F1] (CLR) [F2] (Grph)

各種設定、座標設定、点、円、線の描画、消去といった基本的なコマンド類は、これらのメニューから呼び出せます。



Casio Basic 入門 - 新連載の予告

これまで、fx-5800P を中心に Casio Basic 入門を連載してきました。各種コマンド類の使い方、アルゴリズムの紹介をして、ある程度実用的なプログラムを完成させる、といったスタイルです。

これに加えて、fx-9860GII でのグラフィックス プログラミングの紹介を追加してゆくことにしました。先ずは、上記の基本的なコマンド類について、取りあえず私が納得する範囲で調べたその結果を Casio Basic 入門 で紹介します。但し、具体的なゲームなどのプログラム作りは行わず、各コマンドの機能、制限、内部動作が分かるようなプログラムを作ってゆくスタイルにします。

コマンドを実際にみてゆくと、古いグラフ関数電卓から搭載されていたものに加えて、後から追加されたものがあります。このような流れを念頭にして、色々と調べてゆくと、内部動作を垣間見ることもでき、面白いものです。詳しくは Casio Basic 入門で紹介します。さらに、コマンドリファレンスにも追加する予定です。

その後は、グラフ機能や統計計算機能に付随する描画機能も調べてみて、グラフィックス描画性能を上げる可能性も探りたいと思っています。



画面を塗りつぶしてみる

カシオのグラフ関数電卓でのグラフィックス描画は、概して遅いと言えます。しかし、グラフィックス機能といえばゲームプログラミングだと思いますが、そもそも fx-9860GII はどのくらい遅いのか、sentaro 様にご協力頂きながら、実際に調べてみました。

単純に、LCD画面の下半分をドットで塗りつぶすプログラムです。下のプログラムを実際に入力するか、Markout.g1m ファイルをダウンロードして転送し、実際に実行してみてください。

Casio Basic 版 塗りつぶしプログラム MarkOut

ClrGraph
AxesOff
CoordOff
GridOff
LabelOff
ViewWindow 0,126,0,0,62,0
For 0→Y To 31
For 0→X To 126
PlotOn X,Y
Next:Next


以下からダウンロード;
MarkOut.g1m

fx-9860GII でのグラフィックス描画は、一旦メモリにグラフィックスデータを送り、それを LCD 画面に転送する手順で実行されます。Casio Basic では、VRAMへの書き込みとLCDへの転送が、コマンドごとに行われます。

一方、SDK で Addd-in を作る場合は、VRAMへの書き込みとLCDへの転送を、個別に指示できるので、VRAMへのデータ書き込みをある程度まとめて行った後、LCDへ一気に転送すれば描画が速くなる筈です。LCDへのデータ転送の間引きを 1/10 にするのか、1/100 にするのか、1/1000 にするのかで、どの程度速度が変わるのか、試せるように Add-in を作りました。Casio Basic のアルゴリズムをそのまま採用しています。

Casio Basic では、プログラム実行の途中でも [AC] キーで強制終了できます。そこで、Add-in でも描画の途中で [AC] キーで強制終了できるようにしています。

Casio Basic に無い要素として、1ms の分解能のタイマーを同時に走らせて、実行時間の測定を行えるようにしています。このルーチンは sentaro 様が公開されているソースから、流用させて頂いています。

さて、プログラムを作って走らせている際、キースキャン ([AC] キーの検出、Casio Basic の Getkey に相当) が意外と時間を喰っていることに気付き、キースキャンも上と同様に間引きして、その影響をチェックできるようにしました。


Add-in 版塗りつぶしプログラム

以下からダウンロード;
MarkOut.zip


[2015/06/24 修正]
sentaro様からコメントを頂きました。

Add-in 版 MarkOut は、[F1] ~ [F4]を押して測定を開始する。Casio Basic 版と同様に、測定中は [AC] キーを押したら強制終了するようにするため、測定中でもプログラム内で [AC] キーをスキャンして、[AC] キー以外を押すとキースキャンがスキップされてプログラム実行速度が速くなる。逆に言えば、測定開始のために [F1] ~ [F4] を押すと、押した時だけプログラムが加速されていまうので、正しい時間測定にならない。
そこで、[F1] ~ [F4] を押して各測定モードに入った後、[EXE] キーが押されてからキーアップしたタイミングで測定開始させれば、上記の問題は解消される。

その通りですね。そして、これを実現した改良版を作って頂きました。上からダウンロードする Add-in は、この sentaro様の改良版に変更しました。sentaro様、ありがとうございます。
=====

先ずは、LCDへの転送を間引くと瞬間に描画が終わります。Casio Basic では、ドットを1つ描画するたびに LCD転送しているわけで、LCD転送が如何に時間のかかる処理か、とてもよくわかります。

グラフィックス プログラミングは、高速化が必要なプログラムには SDK で作る必要がありそうです。

なお、キースキャンも、LCD転送ほどでは無いのですが、結構な時間がかかっていることが分かります。

LCD Trasnfer Check モードで実行中に、[AC] キー以外を長押ししてみると、さらに増速します。キースキャンを減らしていることになるからです。


Casio Basic でのグラフィックス描画は、遅いという弱点がありますが、画面を全て塗りつぶすような重い処理でなければ、利用価値は多くあると思います。先ずは 実装されているコマンドをしっかりと理解して、使いこなそうと思います。




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ


 


keywords: fx-9860GII、fx-5800PCasioBasicプログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

fx-995ES / fx-993ES / fx-991ES のイースターエッグ

  2015/06/15

fx-JP900 以外の最近のカシオ製スタンダード関数電卓、特にドットマトリックス液晶を備えた機種のイースターエッグ/自己診断機能を、所有している電卓についてもまとめてみます。

発端は、akatuki様によるブログ:高機能電卓の情報の記事、素晴らしい!「CLASSWIZ」の記事 のコメント欄でのやりとりです。fx-JP900 以外のカシオ関数電卓自己診断機能についてもまとめてみます。

自己診断機能を開始させるキーの組み合わせは、fx-995ES、fx-993ES、fx-991ES は全く同じです(fx-JP900 とも同じ)。診断モードでは、液晶表示チェックとキー入力チェックを行う。これら3機種は、同じパターンの青液晶のパネルを使っていて、ドットマトリックスと、その上のインジケータでパターンが構成されています。

なお、fx-JP900 の診断モードで行うキーマトリックスのチェックと電源チェックは、これらの機種では行いません。他の診断モードがあるならば、これを起動するキーの組み合わせがまだ不明です。


fx-995ES / fx-993ES の診断モード
Int_fx-995ES Int_fx-993ES Int_fx-991ES 


診断モードに入るには、[SHIFT]+[7] を同時押ししたまま [ON]を押します。この操作は電源が入っている、入っていないに関わらず有効です。これは、最近のカシオのスタンダード関数電卓でほぼ共通のようです。

診断モードの動作は、fx-995ES と fx-993ES は全く同じです。これらは、診断モードに入ると、

DIAGNOSTIC

Press AC


と表示されます。ここで何もしないと、診断モードを抜けて通常の計算モードに移行します。この表示がされた後、タイムアウトする前に [9] を押すと診断ル-チンが始まります。

fx-991ES は、診断モードに入ると、すぐに液晶チェックが始まります。その後の動作は、fx-995ES / fx-993ES とほぼ同じです。

操作画面出力
0[SHIFT]+[7]+[ON]診断モードに入る
1[9]液晶のインジケータと全ドット点灯
2[SHIFT]液晶のインジケータと全ドット消灯
3[SHIFT]ドット領域外縁の1ドットのみ点灯(枠の表示)、但し中間輝度
4[SHIFT]インジケータ半分、ドットは1つおき(千鳥格子)に点灯、但し中間輝度
5[SHIFT]残りのインジケータとドットを表示
6[SHIFT]ファームウェアバージョン表示、
CPUとメモリチェック(?)
7[AC]コントラストチェック
8[AC]00 と表示 ([AC] のキーチェック?)
9[SHIFT]01と表示、他のキーは受け付けない
10[ALPHA]02と表示、他のキーは受け付けない
11[上矢印]03と表示、他のキーは受け付けない
12[右矢印]04と表示、他のキーは受け付けない
13[MODE/SETUP]05と表示、他のキーは受け付けない
14[CALC]06と表示、他のキーは受け付けない
15[積分]07と表示、他のキーは受け付けない
16[左矢印]08と表示、他のキーは受け付けない
17[下矢印]09と表示、他のキーは受け付けない
18[x-1]10と表示、他のキーは受け付けない
19[log□]11と表示、他のキーは受け付けない
20[分数] ~ [ln] まで順に押す12, 13, 14, 15, 16, 17 と順に表示、他のキーは受け付けない
21[(-)] ~ [Ans] まで左から右、上あら下へ順に押す18 から 48まで順に表示、他のキーは受け付けない
22※)[=]TEST OK

Reset All
Press AC
23[AC]診断モード終了、計算モードへ移行

※) fx-991ES では、出力メッセージの3行目が Press ON となる。
TEST OK

Reset All
Press ON
 



関連ページ:
- fx-JP900 のイースターエッグ - 診断機能
- fx-991MS のイースターエッグ - 診断機能
- fx-991W のイースターエッグ - 診断機能

- fx-5800P のイースターエッグ - 診断機能
- fx-9860GII のイースターエッグ - 診断機能
- fx-CG20 のイースタエッグ - 診断機能
- fx-CG50 のイースタエッグ - 診断機能




応援クリックをお願いします。励みになるので...

人気ブログランキングへ





keywords: fx-JP900fx-5800Pfx-9860GII関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

fx-JP900 のイースターエッグ - 診断機能

  修正 2015/06/20

akatuki様によるブログ:高機能電卓の情報の記事、素晴らしい!「CLASSWIZ」の記事 にて、コメント欄に sentaro様が fx-JP900イースターエッグのヒントを書き込まれました。面白いので、色々と調べた結果を紹介します。

実は、かなり以前にカシオ関数電卓 fx-373ES のイースターエッグ(診断モード)の出し方が、動画で紹介されていました。ここでもおなじみの藤堂様による投稿です。私は全く知りませんでした。⇒ オヒ!の伝殿堂3:計算機情報





fx-JP900 の診断モード
fx-JP900
今回見つけた fx-JP900イースターエッグです。基本は、 [SHIFT]+[7] を同時押ししたまま [ON] を押します。この操作は電源が入っている、入っていないに関わらず有効です。これは、最近のカシオのスタンダード関数電卓でほぼ共通のようです。

診断モードに入って何もしないと、診断モードを抜けて通常の計算モードに移行します。診断モードに入った後、タイムアウトする前に [8] を押すか、[9] を押すかで、異なるル-チンが走ります。





先ず、[8] を押した時の処理をみてみます。
操作画面出力
0[SHIFT]+[7]+[ON]診断モードに入る
1[8]キーマトリックスの試験
2表示されたキーを押す表示が反転する
38つ全てのキーを順不同で押す全ての表示が反転する
4全てのキーを押した後、太陽電池への光を遮蔽するBattery MODEL OK!
5遮蔽を外すSolar MODEL OK!
6[AC]計算モードへ移行

[0] キーから始まる一番下の横一列、6つのキーは、[(-)] キーから始まる横一列に繋がるようなキーマトリックスになっているのが興味深いです。

キーマトリックス試験での表示;
[1]KI1K01[SHIFT]KI8K01
[5]KI2K02[9]KI3K03
[ ) ]KI4K04[log]KI6K05
[logab]KI7K06[0]KI5K07

[logab] キーは、fx-JP900 では [SHIFT] - [(-)] なのですが、[SHIFT] 付きや抜きで押しても反転しません。正解は [x] キーでした。実は、fx-995ES や fx-993ES のキー配置を見ると、[x] キーの位置には [logab] のキーがあることを発見! ルーチンは昔のままなのですね。概ね左下から右上までのキーマトリクスのチェックを行っているようです。

次に、[9] を押した時の処理です。
操作画面出力
0[SHIFT]+[7]+[OK]診断モードに入る
1[9]8888888888888888

   8.888888889x
1015
2[SHIFT]インジケータと全ドット点灯
3[SHIFT]インジケータと全ドット消灯
4[SHIFT]インジケータ点灯、ドットが交互(千鳥格子状)に点灯
5[SHIFT]インジケータ消灯、ドットは反転
6[SHIFT]ファームウェハのバージョン表示
7[MENU][AC] で分岐
 [MENU]CPUとメモリチェック(?)、7へ続く
 [AC]8へジャンプ
8[AC]シリアル番号を表示
9[AC]00 と表示 ([AC] のキーチェック?)
10[SHIFT]01と表示、他のキーは受け付けない
11[ALPHA]02と表示、他のキーは受け付けない
12[上矢印]03と表示、他のキーは受け付けない
13[右矢印]04と表示、他のキーは受け付けない
14[MENU/SETUP]05と表示、他のキーは受け付けない
15[OPTN]06と表示、他のキーは受け付けない
16[CALC]07と表示、他のキーは受け付けない
17[左矢印]08と表示、他のキーは受け付けない
18[下矢印]09と表示、他のキーは受け付けない
19[積分]10と表示、他のキーは受け付けない
20[x]11と表示、他のキーは受け付けない
21[分数] ~ [ln] まで順に押す12, 13, 14, 15, 16, 17 と順に表示、他のキーは受け付けない
22[(-)] ~ [Ans] まで順に押す18 から 48まで順に表示、他のキーは受け付けない
23[=]コントラスト調整画面
24[AC]TEST OK

Reset All
Press AC
25[AC]診断モードから計算モードへ移行

動作がおかしい時に、メーカーでは先ずこのチェックを行うのでしょう。異常時にどのような表示になるのかは分かりません。これも興味ありますが、さすがに壊すつもりはありません(^^;)




関連ページ:
- fx-995ES / fx-993ES / fx-991ES のイースターエッグ
- fx-991MS のイースターエッグ - 診断機能
- fx-991W のイースターエッグ - 診断機能

- fx-5800P のイースターエッグ - 診断機能
- fx-9860GII のイースターエッグ - 診断機能
- fx-CG20 のイースタエッグ - 診断機能
- fx-CG50 のイースタエッグ - 診断機能




応援クリックをお願いします。励みになるので...

人気ブログランキングへ





keywords: fx-JP900fx-5800Pfx-9860GII関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

fx-JP900 と fx-5800P 後継機への期待

  更新 2015/06/14

fx-JP900_x480 

これまで、独断と偏見で fx-JP900 に関して述べてきましたが、実際に使っているうちに、このデザインが益々好きになってきました...カシオの電卓で初めての気分です。

前の記事で、白の筐体とカバーは長期使用を考えるとよろしくないと書きましたが、エンボス処理した黒と白を基調にシルバーがアクセントを添えるこのデザインには、ケースの白色の必要性がわかります。

素因数分解の計算速度をプログラム電卓と比較することで(sentaro様の分析を参照)、 fx-JP900 の CPU は fx-5800P と同等以上で、なおかつ低消費電力 (1Vでの動作保証?)と、推察されます。メモリは、fx-955ES の倍の容量になっています。

関数電卓のターゲットは教育市場で、学生や先生に学校で使って貰えることを主眼に設計されていて、高精細液晶も教育現場の声が反映されていて、理工系の学生が想定ユーザーなのは既知のことです。ところが、今回は学校を卒業した後の技術者に所有する喜びを持って貰うデザインにしたのだそうです(下記の参考ホームページにある記事の動画で、開発者が語っています)。

ニュースリリースでは、fx-JP900/700/500 まとめて年間20万台生産の計画になっています。海外では それぞれの現地に合わせた異なる型式が国内よりも多いラインアップで投入されています。デザインに拘って、従来の関数電卓ユーザーの買い換え需要を意識しているに違いないのです。



カシオの関数電卓には、スタンダード関数電卓、グラフ関数電卓、そしてプログラム関数電卓の3つのカテゴリがあります。それらが、互いの進化を取り込むことで、それぞれ進化してきています。

最近のスタンダード関数電卓では、主に表示と入力方法が進化しています。グラフ関数電卓では、主に表示のカラー化とCasio Basicの進化が進んでいます。おそらく新しい要素技術の量産化は、スタンダード関数電卓で低コスト化を主に進め、プログラム関数電卓ではマーケティング要素で製品化するといった感じで、良いところを取り込みながら進化してきているように思われます。

進化の一例としては、現在のグラフ関数電卓では、プログラム実行のためには、いちいち Program モードに入る必要があります。日常的にプログラムを使うにはこれが、なかなか不便です。これに対して fx-5800P は、Programモードに入らずに、プログラムリストを表示して実行させるための [FILE] キーが備わっているので、日常的にプログラムを使うには、とても利便性が良くなっています。このように、グラフ関数電卓のプログラム機能を、使いやすくチューニングしているわけです。これが、プログラム関数電卓の位置づけのように思われます。



スタンダード関数電卓 fx-991ES での新機軸、自然数学入力機能をベースに、CFX-9850GC PLUS の Casio Basci を融合させて、fx-5800P にまとめ上げました。

最近の流れはどうか?

土木測量専業電卓 fx-FD10 Pro は、これまでのグラフ関数電卓をベースに、fx-5800P に備わったプログラム実行の利便性、そして旧来の命令である 入力命令にも fx-5800P と同じ利便性が備わっています。私は、fx-FD10 Pro は、fx-5800P の1つの進化形としての実験的なモデルだと見ています。

10年以上(16年間)継続発売されていた FX-603P の後継機としての fx-5800P は、2006年の発売開始から今年で9年目。このタイミングで、最新のハードウェアとデザインで、新機軸を打ち出した関数電卓 fx-JP900 の登場。さらに、プログラム電卓として fx-FD10 Pro で先行実験も済んでいます。fx-5800P 登場前夜とよく似た状況です。

準備完了!いよいよ次の10年を目指したプログラム関数電卓、fx-5800P の後継機が登場するに違いないのです。

是非とも、現行機の欠点を解決し、fx-JP900 の改良点を取り入れ、さらに所有する喜びを満たすデザインを纏い、グラフ関数電卓とはひと味違った実用本位のモデルを開発して頂きたい。

電池駆動で良いので、fx-FD10 Pro の機能を、fx-JP900 のデザインに融合したモデルが理想です。



参考ホームページ: 異様に欲しくなった電卓の話 カシオ CLASSWIZ

関連ページ:
- Casio fx-JP900
- Casio fx-JP900(その2)
- Casio fx-JP900 (その3)
- Casio fx-5800P や他の電卓の数値積分


応援クリックをお願いします。励みになるので...

人気ブログランキングへ





keywords: fx-JP900fx-5800Pfx-9860GII関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

プログラムを速くしたい - 逆引き Casio Basic

逆引き Casio Basic
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2015/06/13
[fx-5800P]

頑張って作ったプログラムが思った以上に遅い。これを速くしたい。



プログラム関数電卓 fx-5800P では、作ったプログラムが思った以上に遅くなることがある。最初に作った時は遅いと感じなくても、機能追加をおこなってプログラム規模が大きくなると、目立ってプログラム実行が遅くなることもよくある。

ここで紹介する対策は、fx-5800P 以外の新世代 Casio Basic 搭載のグラフ関数電卓でも使えるが、グラフ関数電卓はそもそもCPUが速い。主に fx-5800P で役立つと思う。

新世代 Casio Basic については、<目次> を参照。

プログラム高速化には、以下を検討すると良い。

・ コマンドや命令の見直し: 実行速度の速い処理に置き換える

・ Goto 削減:
Goto/Lbl をできるだけ使わないようにする

・ 計算式の活用:
条件分岐やループ処理を計算式に置き換える

・ ロジックの見直し:
プログラム全体の構造やロジックを見直す



コマンドや命令の見直し

fx-5800P の Casio Basic は最低必要限のコマンドしか無いが、それでも1つの処理を実現するためには、複数のやりかたがある。ただ、その選択肢が少ないのが特徴で、選択肢が少ないのでプログラムの改善は楽である。

代表的なコマンドや処理の処理時間の一覧をを示す。これは、特定コマンドの厳密な実行時間ではないので、相対的な比較として見て欲しい。

表 fx-5800P Casio Basic 処理時間の比較
処理内容処理時間 (ミリ秒)
A⇒4.1
通常変数アクセス5.4
If A6.2
If A Else7.2
比較演算(変数)9.7
A≠B⇒10.0
論理演算10.0
比較演算(数値)11.5
If A≠B (変数)12.0
if A≠0 (数値)13.7
テキスト表示 (Locate)20.4
配列変数書き込み22.0
配列変数読み出し22.7
リスト読み出し25.1
リスト書き込み25.3
行列読み出し26.9
行列書き込み28.4

1) 配列変数、リスト、行列の使用は極力減らす
 これらは、際だって実行時間が長い。プログラム上完全に無くすことは不可能だが、同じものを繰り返し使うなら、一旦通常変数に代入しておき、それを使えば効果的だ。ロジックを見直して、これらの使用を減らすことも可能なので、検討の余地はあり、とても効果のある方法と言える。

2) 論理演算、比較演算の使用を減らす
論理演算や比較演算は、条件分岐 (If、⇒) やループ (Do, While) の条件判定で使うことが殆どだろう。論理演算子や比較演算子の使用数を減らすように、プログラムを工夫すると良い。同じ演算を繰り返し使用する場合は、大いに改善の余地がある。

3) Baiscコマンドを Dsz、Isz、⇒ に置き換える
Dsz、Isz、⇒ は、古くからの Casio ユーザーの利便性を考えて、現在の Casio Basic でも使えるように配慮されたものだ。特定の条件を満たす場合は、これらの命令を使う方が顕著な高速化が可能になる。

・ If ... Then ... IfEnd (Else が無い) 構文は、に置き換えると30%速くなる。

・ C+1→C は、C が 0 にならないことが保証されるなら、Isz C に置き換える。

・ C-1→C は、C が 0 にならないことが保証されるなら、Dsz C に置き換える。

4) 条件判定で比較演算を使わない
If A≠0、LpWhile A≠0、While A≠0 は、If A、LpWhile A、While A に置き換えるだけで50%の速度向上が見られる。

条件判定は、内部では 0 か 0 でないか、で処理されている。0 の時は偽、0でない時は真、と判定される。そこで、上のように変数を使い、それが 0 か 0でないかで、条件判定ができる。

これの応用として、
If A≠B、LpWhile A≠B、While A≠B は、それぞれ以下のように判定用変数 C を追加した方が遙かに速くなる。

A-B→C
If C:Then
........
IfEnd


Do
........
A-B→C
........
LpWhile C


A-B→C
While C
........
WhileEnd


5) 数値演算は、できるだけ計算式をシンプルにする。
数値演算や関数の処理時間の一例を表に示す。

処理処理時間 (ミリ秒)
乗算 (AxB)1.6
除算 (A÷B)1.8
累乗 (A)1.9
Int(1.23)1.5

数値演算や関数は、相対的に速いことが分かる。しかし、加算を10回行えば、10ミリ秒以上かかるので、これは明かに無駄である。

例えば、
A + (A+1) + (A+2) + ・・・ + (A+10)
を計算する場合、加算 (+) が20回使われる。

そこで、これをシンプルにして
11A+55
とすれば、乗算1回、加算1回だけになり、10倍の速度向上となる。

なお、上の処理速度比較の測定方法や詳細をまとめた記事を紹介しておく;
 ⇒ fx-5800P: 変数アクセス、比較・論理演算、条件分岐の速度比較


Goto 削減
Casio Basic は、プログラムを上から下へ順に読み込みながら実行する、インタープリタタイプの言語だ。
プログラム中 Goto があると、プログラムの最初から最後まで順にスキャンして、ジャンプ先の Lbl や、ジャンプを伴う Basic コマンドを1つひとつ調べる動作が、内部的に行われている。そのため、ジャンプを伴うコマンドが多くなればなるほど、速度は低下する。

従って、やむを得ない場合を除き、Goto を極力使わないことが、高速化の鍵となり、ジャンプを伴うコマンドが多くなるほど、Goto 削減の効果は大きくなる。


計算式の活用
例えば、
A + (A+1) + (A+2) + ・・・ + (A+10) を、

0→I
Do
A+I→A
I+1→I
LpWhile I≦10

とすることができます。実際は、冒頭の式を ループで処理しようとは思わないだろうが、別の処理なら十分有り得る。
このループの代わりに、
11A+55
とした方が圧倒的に速いことに異論は無いだろう。


ロジックの見直し
まずは、プログラムに無駄がないかどうかを調べる。不要な処理が減ればそれだけ速くなるはずだ。
これ以上は、特に一般論はなく、実際のプログラムに即した検討が必要になる。


プログラム高速化の実例



具体的検討の一例として、下記を挙げておく;
 ⇒ Casio Basic入門32 ~ Casio Basic入門37





応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ







keywords: CasioBasic、プログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ



関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

整数の桁数を求めたい - 逆引き Casio Basic

逆引き Casio Basic
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2015/06/12
[fx-5800P] / [fx-9860GII / fx-CG20]

整数の桁数を求めたい。



整数が代入された変数 A を、画面の右端に表示したい時、A の桁数が分かれば簡単だ。
A の桁数を D とすると、

Locate 17-D,1,A   [fx-5800P の場合]

Locate 22-D,1,A
   [fx-9860GII の場合]


とすれば良い。但し D は 自然数 (1以上の整数)で、16以下(fx-5800P)、21以下(fx-9860GII) が条件になる。



A が自然数 (1以上の整数) の時の桁数

1+Int(log(A))→D   ・・・(1)



A が 0 以上の整数の時の桁数

1→D
A⇒1+Int(log(A))→D


A が 0 の時、log(A) はエラーになるが、この時は桁数 D は 1になる。
そこで、先に D に 1 を代入しておき、A が 0 でない時 (1) の処理を行えば良い。A が 0 で(1)の処理がスキップされる時は、既に D に 1 が代入されているので問題ない。



A が 0 を含めた正・負整数の時の桁数

1→D
A⇒1+Int(log(Abs(A)))→D


ここでは、負号 (-) は桁数に入れていない。

負号 (-) も桁数に入れる場合は、以下のようにすれば良い。

1→D
A>0⇒1+Int(log(Abs(A)))→D
A<0⇒2+Int(log(Abs(A)))→D








応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ



   



keywords: CasioBasic、プログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ



関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

fx-5800P で Mod を使いたい - 逆引き Casio Basic

逆引き Casio Basic
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2015/06/12
[fx-5800P]

fx-5800P で整数の割り算の余りを求める Mod 関数を使いたい。



カシオのグラフ関数電卓 fx-9860GII などに実装されている Mod 関数が、fx-5800P には無い。そこで、fx-5800P のプログラムで Mod 関数と同じ機能を実装する。


fx-9860GII などのグラフ関数電卓の Mod 関数
Mod は剰余を得る関数。fx-9860GII では、1373 で割った余りは、Mod (137,3) で得られる。整数を格納した変数 AN を用いて、Mod (A,N) とすれば、AN で割った余りが求められる。


fx-5800P で Mod 関数と同じ機能を実現する
正の整数 A を 正の整数 N で割った時の商 Q と余り M は、以下の関係になる。

A = QN + M  ・・・(1)

一方、商 Q は以下のように現せる。

Q = Int(A÷N)  ・・・(2)


式(2) の Int( ) は、小数点を以下を切り捨てた結果の整数を求める関数だ。
式(2) を使って、式(1)の Q に代入すると、

A = N・Int(A÷N) + M

従って、式を変形して、余り M は以下の式(3)で現される。

M = A - N・Int(A÷N)   ・・・(3)


fx-5800P では、Mod(A,N) の代わりに以下の記述をすれば良い;

A-NInt(A÷N)





応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ



 



keywords: CasioBasic、プログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ



関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

Casio 関数電卓の素因数分解

  追記 2015/06/18

これまで、素因数分解プログラムについて取り上げています。

 ・ fx-5800P で素因数分解
 ・ fx-5800P で素因数分解再び
 ・ fx-5800P 素因数分解 - バグ修正と表示変更
 ・ fx-9860GII への移植 - 素因数分解
 ・ VBAで素因数分解

これらの記事の発端は、カシオのスタンダード関数電卓 fx-995ES に因数分解機能が搭載されたことに始まります。
素因数分解機能が内蔵されたのなら、プログラム電卓で作ってみようと思ったわけです。但し、自作プログラムは、逆立ちしたって内蔵機能よりも速く計算できません。これは、チョット気になっていました。

そこで、今回は、素因数分解のアルゴリズムの話題です。

実は、すけっぴぃ様から、素因数分解アルゴリズムの効率化に関するコメント(ここ)を頂いており、すぐには役に立つ情報を返信できなかったのですが、心の隅に引っかかっていたこともあって、この話題を少し掘り下げてみます。


 
私の手持ちの電卓で素因数分解ができるのは、最初から機能が内蔵されている fx-995ESfx-JP900、それに作ったプログラムが走る fx-5800P と fx-9860GII の4機種。
Int_fx-995ES Int_fx-JP900 Int_fx-5800P Int_fx-9860GII 
順に、fx-995ESfx-JP900、fx-5800P、fx-9860GII

最近、fx-JP900 を入手し、素因数分解機能を試したところ、fx-995ES よりも大幅に計算が速くなっていて、さらに得られる素因数の桁数が増えています。

幾つかの素因数分解結果を、fx-995ES、fx-JP900、fx-5800P のプログラム、カシオの高精度計算サイトKe!san で行った結果の一覧表を再掲載します。← Casio fx-JP900 (その3) から抜粋

整数fx-955ESfx-JP900fx-5800PKeisan
1,234,567127x(9721)127x9,721127x9721127x9721
98,765,43223x37x(333667)
(1.7秒)
23x37x333,667
(0.4秒)
23x37x333667
(27秒)
23x37x333667
9,516,208,47332x172x(3,658,673)32x172x(3,658,673)32x172x365867332x172x3658673
123,456,78932x(13717421)32x(13,717,421)32x3607x380332x3607x3803

因数分解できない場合は ( ) 付きで表示される仕様で、そこは fx-955ES も fx-JP900 も同じ。
但し、fx-995ES は素因数が4桁以上で ( ) 付きになっていましたが、fx-JP900 では素因数の桁数制限が大幅に緩和され、上の例ですと6桁まではOK。

また、fx-JP900 の取扱説明書17ページを見ると、素因数が 1,018,081 以上の素因数を持つ時は計算エラーになると書かれていますが、上の1つめ、2つめ、3つめの例では、( ) 付きで結果が表示されています。これ以上計算できないが、たまたまそれが素因数だったと解釈すれば良さそうです。( ) 付きの場合は、それが正しいかどうかの保証が無いと言うことでしょう。

4つめの例では、( ) 付きの結果は、さらに因数分解できるが、これ以上計算できないことを示しています。

[2015/06/18 追記]
コメント欄での sentaro様とのやりとりから、求める素因数の桁数を制限すること、そしてCPUの演算速度の簡単な比較から、2と3以上の奇数で順次割り算する単純なロジックても、それぞれの実行時間をほぼ説明できそうだ、と今のところの結論です。(追記終わり)



素数は整数論の一分野で研究されていて、素数が無限個存在することは、紀元前300年頃に証明されています。しかし、未だに素数を求める公式が見つかっていないし、素数の密度を求める式も見つかっていません。ケースバーケースの近似的な式があるだけです。それだけ神秘的な数が素数と言えるのですが、だからこそ素数は暗号通信の要として、実用上極めて重要なものになっています。応用工学で重要な素数だからこそ、数学教育において素数は重要だと考え、カシオは素因数分解機能を内蔵したのかも知れません。

ところで、遅いCPUを搭載した fx-5800P で走らせた素因数分解プログラムは、処理が遅いので、あまり凝ったアルゴリズムを実装できません。それに比べて内蔵機能の計算が桁違いに速いことが、気になっていました。

そんなとき、fx-JP900 の評価をしていて、正しく計算する条件として求める素数の桁数に制限があることを改めて考えてみました。桁数の制限をかけるアルゴリズムがあって、それを使えば Casio Basic でも速いアルゴリズムを実装できるかもしれないと思いました。そこで、具体的なプログラムにするには、まだ不完全ですが、取りあえず書いてみます。


fx-995ES では3桁以内の素因数に分解して表示することができるのですが、正しい計算が保証できるときの素因数が3桁と言うのは、どういうことか? 例えば、何十個かの素数の表をメモリ内に持っていて、それを使って計算すれば、かなり計算量が節約できるかも知れません。3桁つまり1~999の範囲にある素数は168個で、最大の素数は 997 です。168個程度のデータならメモリに入れておくのは現実的です。与えられた自然数をこの168個の素数で次々と割り算してゆけば、2と奇数で順次割り算するよりも、遙かに計算量が少なそうです。

ある整数の素因数分解を行う時、素因数はその整数の平方根以下になることを使い、さらに2と奇数を順に割り算して素因数を求める計算を、fx-5800P や fx-9860GII 用に書いたプログラムで行っています。このとき、3桁の素数で最大は 997 なので、9972 = 994009 以下の素因数分解は、メモリに保存された168個の素数で順割り算すれば、かなり計算量は節約できます。fx-5800P や fx-9860GIi で作ったプログラムでは、2と奇数で割り算するので、499個の数で割り算しています。つまり、計算量は 168÷499 = 0.3367 つまり 約33%、1/3 にに抑えられます。
Casio Basic での変数参照や配列参照のアクセスに比べて、関数計算する際のテーブル参照は遙かに速いと考えられるので、これで内蔵機能が速いことが説明できそうです。この方法を Casio Basic のプログラムに反映する際は、算術演算に 1~1.5ms 程度かかり、配列変数や行列へのアクセスに20ms程度かかること、そしてこの差を考慮して、本当に速くなるのかどうかを検討する必要があります。


一方 fx-JP900 は、1,018,081 以上の素因数を持っている整数ではエラーになる仕様です。ちなみに 1,018,081 は素数でなくて、これを素因数分解すると 10092 です。fx-5800P のプログラムで計算してみると、1,018,081 未満で最大の素数は、1,018,057 だと分かります。1,000,000 (100万)までの素数は 78,498個あるので、8万個近くある素数の表を不揮発メモリに持っておくのは、関数電卓としてはあまり現実的ではないでしょう。1,018,081 以上でエラーになることから、ひょっとしてこれを実装していることも考えられますが、素因数分解だけのために原価を押し上げるメモリを使うのは疑わしいわけです。

そこで、メモリに保存された素数テーブルを使わず、完全ではないものの、素数を計算して、それで順次割り算してゆく方法は、うまくすると計算量を減らして、高速化できるのかも知れません。或いは、メモリ上の素数テーブル参照と計算の併用も現実的な折衷案かも知れません。

素数の計算については、以下の式が非常に効率よく素数を計算するものとして知られています。
オイラの素数の式 
これはオイラーが見つけた、素数 p を求める式です。全ての素数をもれなく見つけることはできません。
ただ、この式の面白いのは、x  が 0 から 39 の時に得られる数が全て素数だと言う点にあります。但し、x=39 の時得られる素数 1601 以下には、この式で得られない素数が沢山あります。1601 以下の全ての素数を算出できるわけではありません。

さらに、 が 0 から 60 の時は、x = 40, 41, 42, 44, 49, 50, 57 の7個の x 以外で、 p は素数になります。素数を算出する効率は、x が 0 から 60 で計算した61個の値のうち88.5% が素数になります。繰り返しますが、これで得られる3071 以下には、この式の結果以外に多くの素数があります。

xpxpxp
0411322326743
1431425127797
2471528128853
3531631329911
4611734730971
57118383311033
68319421321097
79720461331163
811321503341231
913122547351301
1015123593361373
1117324641371447
1219725691381523
391601
 ・・・・・・
603701
10081017113

ちなみに、x = 1009 の時 p = 1,019,131、x = 1008 の時 p = 1,017,113 となります。つまり、x = 1008 で得られる1,017,113 がこの式でエラーにならない最大素因数 1,018,057 に最も近いものだと分かります。この式では、100万までの素数の47.5% が求められることが調べられていて、効率は半分以下に落ちます。しかし、現在 fx-5800P や fx-9860GII に実装しているプログラムのロジック「2と奇数で約 50万回近く割り算する」よりも、1000回程度の割り算をする方が、計算量が 1/500程度になります。仮に3分かかっていた計算は1秒以下になりそうです。

与えられた整数に対して、先ず先に、このオイラーの式で得られる計算値から素数を選んで、それで順次割り算して、残った余りについて、2と奇数で順次割り算して計算すると言うアルゴリズムが考えられます。オイラーの計算値から少ない計算量で素数を見つけられれば、テーブルと計算の併用で、高速化の可能性があります。x をどの範囲まで使うのか、38 までとするか、60 とするか、1008 までとするか、その中間のどこかにするか、も実際の計算量とコマンドの処理速度から最適点を検討する必要があります。仮に、x = 1000 まで使うなら、1000の47.5% に相当する 475 個の素数で順次割り算するので、500 / 500,000,000 = 0.001% となり、他の計算量と計算時間を低く抑えられれば、大幅な高速化ができるかも知れません。

プログラムの実装は、そのうちやってみようと思います。もし先にプログラムを作られた方は、是非コメント欄で発表してください。お待ちしております。



ところで、余計な話になりますが、

The Asahi Shinbun Blobe - 数学という力 というサイトでは、素数と円周率の関係、素数と宇宙の真理の関係について解説されていて、なかなか面白いです。素数は現代数学の花形の1なのですね。

ゼータ関数 
これは、リーマンと言う数学者が名付けたゼータ関数というものです。一番右の項は、オイラー積という総積計算で、素数 p がしっかり出てきます。

この式で、s=2 の時は、
ゼータ関数(s=2) 
となって、素数 p のオイラー積 と円周率 π が結びつくことが発見された歴史的な式をゼータ関数で表したものです。素数と円周率の関係式をより一般化したゼータ関数で表現することで、より深く調べることができるというわけです。上の記事によれば、この式を巡った素数の熱い研究が進められているようですね。簡単に素因数分解できる公式が存在するのかどうか?まだよく分かっていません。そのうち見つかる筈と言う人もいれば、存在しないかも知れないと言う人もいます。あまり簡単に計算できると、インターネットなどで使われている暗号が簡単に破られることに繋がるので、大問題です。

脱線すると、このゼータ関数で s=-1 の時は、
ゼータ関数(s=-1) 
なんて、なってしまいます。自然数を無限に足すと、-1/12 になる、なんとも受け入れられない結果です。実は、ゼータ関数は複素数の世界のものなので、一見あり得ない結果に見えるわけです。

カシオの高精度計算サイト Ke!san のココでも取り上げられています。
ここでは、明確に書かれていませんが、s=-1 で、実数の世界を複素数の世界に拡張(解析接続)しています。ゼータ関数の性質として、これはやっても良いこと(s=1 以外で解析接続できてしまう)なので、間違っちゃいないのですが、紛らわしいですね。

1+2+3+4+・・・  は実数の世界と誰でも思うので、自然数の無限和が負の数である -1/12 に収束するなどと言うのは、実数の世界では間違いです。でも複素数の世界では収束するので、ゼータ関数は物理の計算で重宝されているわけです。

素数は大きくなると、まばらになるのか?その密度はどうなっているのか? これもはっきりと分からない問題でしたが、2014年には素数は極端な偏りがなく万遍なく分布することが発見されました。→ こちら


素数の性質の研究は、非常にホットな分野ですね。まぁそれだけ分からないからこそ、暗号に使われるわけです。
深淵な研究は数学者に任せるとして、取りあえずプログラム電卓で素因数分解の高速化が出来るかも知れないということで、一旦区切ることにします。




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ

 

keywords: fx-5800Pプログラミングプログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

Casio fx-5800P や他の電卓の数値積分

  修正 2015/06/07

fx-JP900 の数値積分計算が非常に速くなり、プログラム関数電卓 fx-5900P よりも速くなったことから、最近の自然表示関数電卓、プログラム電卓で、幾つかの計算の比較をして、数値積分の違いや変遷を調べて見ます。

今回比較の対象にしたのは、以下の機種。

Int_fx-991ES Int_fx-993ES Int_fx-995ES 

順に、fx-991ES、fx-993ES、fx-995ES



Int_fx-JP900 Int_fx-5800P Int_fx-9860GII 

順に、fx-JP900fx-5800Pfx-9860GII

今回のテーマとは関係ありませんが、こうしてみると黒液晶は見やすくて良いですね。


数値積分

fx-995ES、fx-JP900fx-5800Pfx-9860GII の結果は、Casio fx-JP900 (その3) の内容のままで、これに fx-991ES と fx-993ES の結果を追加しました。処理速度の順に機種を並べ直しています。

機 種積分1積分2
fx-991ES28.0秒5.1204秒 4.2
fx-993ES26.4秒4.8246秒5.1
fx-995ES25.6秒4.7
241秒
4.9
fx-5800P10.1秒1.856,7秒1.2
fx-JP9005.5秒48.7秒
fx-9860GII1.5秒0.278.4秒0.17

 で示したように、何故だか一番遅い筈の fx-991ES が積分2については、fx-995ES よりも速い逆転現象が見られます。何度か測定しなおしたのですが、これは間違いありません。

積分1、積分2共に、fx-JP900 の処理時間を1として、その相対比率を赤文字で示しています。機種別の処理速度の相対比率をグラフにしてみました。
積分比較 
全体として、CPU速度の違いがうまく反映したグラフになっていると思います。

細かくみてみると、fx-JP900 に対する fx-993ES、fx-995ES (スタンダード関数電卓)の処理速度の割合は、積分1と積分2が同じ比率になっています。ところが、fx-JP900 に対する fx-5800P と fx-9860GII (プログラム電卓)の処理速度の割合は、積分1と積分2の割合が上記と異なっており、誤差と言えないレベルの差を示しています。これはCPU性能だけが要因ではなくて、プログラム電卓での計算アルゴリズムの違いが反映されている可能性を示しています。

面白いのが、fx-991ES では、積分2が全体の傾向に合わない逆転現象を示している点です。

関数電卓とプログラム電卓のグループで分けて見てみると、fx-JP900を基準にした処理時間比は、関数電卓では積分1の方が小さい傾向(逆に速度比は大きい)があり、fx-5800P や fx-9860GII などのプログラム電卓では積分2が相対的に処理時間比が小さい傾向(速度比が大きい傾向)が見られます。但し fx-9860GII ではその差は非常に小さく、CPUが圧倒的に速いので差が小さくなっていると考えられ、プログラム電卓と関数電卓とで傾向の違いがあると言えるかも知れません。

この速度比の傾向が、fx-991ES と fx-5800P が同じなのは、共に2006年発売であることと関係あるかも知れません。

これら機種の取扱説明書を見ると、fx-9860GII 以外の数値積分計算には、ガウス・クロンロッド法を使うとありますが、fx-9860GII については、数値積分計算の方法についての説明はありません。誤差は fx-995ES だけ指定無き場合はに 1x10-10 で、それ以外は 1x1--5 とありますが、いずれも正しい計算結果を出しており、誤差は数値積分処理時間に影響が無いように思います。

ガウス・クロンロッド法は周期関数が苦手で、却って計算時間がかかる傾向があるようです。積分2に時間がかかる上の結果もそれを反映しているようです。

積分1と積分2の処理時間の比率を各機種別に整理して、グラフを作ってみます。CPU速度の違いを打ち消して、苦手な周期関数をどのように扱うのかのアルゴリズムの違いを反映する例になると思います。

機種処理時間比率 [積分2/積分1]
fx-991ES7.29
fx-993ES9.32
fx-995ES9.41
fx-JP9008.85
fx-5800P5.61
fx-9860GII5.6
積分比較2 
プログラム電卓である fx-5800P と fx-9860GIi は、積分1と積分2の速度比率がほぼ同じなので、似たようなアルゴリズムになっていると思われます。



ガウス・クロンロッド法が苦手とする周期関数の積分の例として、以下のような計算をさせてみます。
積分3 

ここで、n は、自然数(1, 2, 3...)です。n を少し大きな数にすると、いずれの機種でもタイムアウトになって計算を諦めてしまいます。そこで、タイムアウトしない n を比較すれば、積分アルゴリズムの違いが分かるかも知れません。

機種計算できる nタイムアウトする n
fx-991ES89
fx-993ES89
fx-995ES89
fx-JP90089
fx-5800P89
fx-9860GII6061

いずれの機種も計算できた時は、正しい計算値(4n)を示します。上記のいずれの機種も内部精度は15桁です。sin x の入力範囲も同じです(0 ≦|x| < 157079632.7)。

fx-9860GII だけが、より大きな n で計算可能なのは、圧倒的なCPUの速さから、タイムアウト時間を長くとっているのかも知れません。

アルゴリズムもチューニングしている可能性がありそうです。



関数計算に使われるアルゴリズムには、CORDICや多項式近似があり、sentaro様によれば、Intel 486系までではCORDICが使われ、Pentium 以降では多項式近似が使われるようになっているとのことです。CORDIC は、小さなテーブル参照と四則演算で関数計算が可能になる巧妙なアルゴリズムで、遅いCPUと限られたメモリしかない環境では有効です。一方、多項式近似は、速いCPUと十分なメモリを使える場合は、精度と速度が得られるので、Pentium以降で用いられることは納得できます。

以下の資料が非常に参考になります。

関数計算で用いられる、CORDIC と 多項式近似についてまとめられている;
- 関数アルゴリズムの検証

CODRICの具体的な計算方法が、大変分かりやすく書かれている;
- サルでもわかるCORDICアルゴリズム


カシオの電卓は、浮動小数点処理を行うFPUが使われていないようなので、基本的にはCORDICが採用されていると考えられます。

積分1と積分2の計算時間の違いについて、関数計算の違いがどの程度反映しているのかを調べて見ます。

ガウス・クロンロッド法はガウス法の一種で、積分区間内の複数点での f(x) の値の総和を求める計算をしています。そこで、総和計算を、cos x と cos(ln x) で行って、その違いをみてみます。

機 種総和1総和2
fx-991ES23.1秒6.236.4秒5.3
fx-993ES17.7秒4.834.0秒4.9
fx-995ES17.0秒4.6
32.8秒
4.8
fx-5800P8.7秒2.411.7秒1.7
fx-JP9003.7秒6.9秒
fx-9860GII1.9秒0.511.9秒0.28

積分と同様に、fx-JP900 の処理時間を1とした相対比率(赤文字)を使ってグラフを作ってみます。
総和比較 
全体的には、CPU速度の違いをうまく反映した結果になっています。但し、fx-991ES の総和2の計算時間が特異的に速くなっていて、積分計算と同様の結果です。さらに、fx-JP900 に対する処理時間の割合が、関数電卓とプログラム電卓で異なった比率になっていて、これも積分計算の傾向と同じです。積分も内部では総和計算を使っていると考えれば、同じ傾向になるのは納得できます。ちなみに、取扱説明書によれば、cos( )ln( ) の入力範囲と精度は、いずれの機種でも同じです。

総和1と総和2の処理時間比率を機種別に整理してグラフ化してみます。CPU速度の違いを消して、アルゴリズムの違いを見る試みです。

機種処理時間比率 [総和2 / 総和1]
fx-991ES1.58
fx-993ES1.92
fx-995ES1.93
fx-JP9001.86
fx-5800P1.34
fx-9860GII1.00
総和比較2 
総和1に対する総和2の相対速度は、積分計算と異なり、fx-5800P より fx-9860GII がはっきりと速くなっています。タイムアウトする積分3で見たように、fx-9860GII では関数計算がチューニングされているようです。


以上、あまり明確なことは言えませんが、fx-5800P の積分計算の位置づけが少し見えたと思います。




関連ページ:
- Casio fx-JP900(その3)






応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ

 

keywords: fx-5800Pプログラミングプログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています

おもしろい・役に立つならクリックしてください。励みになります。
にほんブログ村 IT技術ブログ 開発言語へ
にほんブログ村


人気ブログランキングへ


FC2ブログランキングへ


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR