fx-9860GII への移植 - 素因数分解

2014/12/13: 修正
2015/02/28: 追記

これまで、fx-5800P の Casio Basic で素因数分解のプログラムを紹介してきたが、これを fx-9860GII へ移植してみました。

今回のプログラム移植にあたっては、fx-5800P にある 配列変数 Z[ ] が fx-9860GII には無いので、これをどうするか、が主なテーマです。今回は、配列変数の代わりに行列を用いることにします。

なお、出力命令 ◢ を使った時の動作が、fx-5800P と fx-9860GII では異なることは、ピタゴラス数探索プログラムの fx-9860GII への移植 で経験しています。⇒ こちらの記事

これは、本来表示される筈の行が上書きされて - Disp - と表示されてしまう問題です。今のところ、決定的な解決策がまだ見つかっていないので、表示全体を1行下に下げると言う方法で回避することにします。



配列変数を行列に置き換える

配列変数 Z[N] は、1行N列の行列と同じなので、以下のようにします。

1. 領域確保 (要素20個を確保して、各要素を 0 で初期化する)
  ・配列変数の確保: 20→DimZ
   の代わりに
  ・1行20列の行列確保: {1,20}→Dim Mat Z
   [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]→Mat Z これでも間違いないが、効率が悪い。
   fx-9860GII の Casio Basic では 最大999行999列の行列まで使えるので、Dim コマンドを用いるべき。

   [2014/12/08 sentaro様のご指摘により記述を修正]

2. 使い方
  ・ 配列変数: Z[K]
   の代わりに
  ・行列 Z : Mat Z[1,K]

3. 領域解放
  ・配列変数の解放: 0→DimZ
   の代わりに
  ・行列 Z の解放: ClrMat Z

要するに、プログラムの記述を、上のように置き換えれば動作するはずです。



- Disp - 表示による問題の回避

Locate コマンドで指定する座標を 下に1つ増やす (Y座標を1つ増やす) ことで対応します。
今回は、多くの Locate コマンドの座標指定に変数や式を用いているので、チョット注意が必要です。但し、今回のプログラムで使っているLocate コマンドのY座標は、変数 L やLを使った式で指定しているので、L の値を1つ増やすように変更すれば良さそうです。具体的には、一番下に示すプログラムを見てください。



全画面消去コマンドの変更

fx-5800P の全画面消去は Cls コマンドを使用します。テキスト表示の全消去機能です。
一方、fx-9860GII は、テキスト表示とグラフィック表示の両方の機能があり、テキスト表示の全消去は ClrText コマンドを使います。
ちなみに、グラフィック表示の全消去は ClrGraph コマンドです。


今回は、配列の扱い、出力命令の動作と画面行数に合わせたLocateコマンド引数の修正のみで、fx-9860GII に移植したプログラムは問題なく動作しました。要所を分かっていれば、Casio Basic は移植性が高いと言えます。



プログラム実行画面

fx-5800P と fx-9860GII の両方で、ほぼ同じ Casio Basic プログラムを走らせた時の、画面表示の比較です。


※プログラムを起動した時の画面:

PD_5800P_1 PD_9860GII_1 


※数を入力する:

PD_5800P_2 PD_9860GII_2  


※素因数分解を最後まで計算したあとで、結果を表示:

PD_5800P_3 PD_9860GII_3  

1行表示されたら [EXE] キーを押して次の行を表示させます。
これを繰り返して、上のように が表示されたらそれが最後の素因数です。
ここで、 [EXE] キーを押せば最初の入力画面に戻ります。

fx-5800P では4行を超えると再び1行目から上書きします。
fx-9860GII では7行を超えると再び行目から上書きします。



計算速度の比較

fx-9860GII は、ノーマル (約29MHz) と オーバークロック (約236MHz) で測定しました。

入力した自然数結果fx-5800Pfx-9860GII (29MHz)fx-9860GII (236MHz)
123453 x 5 x 8232.2秒0.5秒 (4.4倍)計測不能 (一瞬)
12345626 x 3 x 6432.6秒0.6秒 (4.3倍)計測不能 (一瞬)
1234567127 x 97216.5秒1.5秒 (4.3倍)0.3秒
123456782 x 32 x 47 x 145936.6秒1.5秒 (4.3倍)0.4秒
12345678932 x 3607 x 38032分43秒33秒 (4.9倍)7.2秒
98765432132 x 172 x 37972128秒6秒 (4.7倍)1.3秒
9876543223 x 37 x 33366727秒5.5秒 (4.9倍)1.3秒
98765433 x 227 x 1450311秒2.4秒 (4.6倍)0.6秒
9876542 x 3 x 97 x 16975秒1.3秒 (3.8倍)0.4秒
987655 x 197537秒1.6秒 4.3倍)0.3秒
987622 x 3 x 8233秒0.7秒 (4.3倍)計測不能 (一瞬)

今回の速度比較には、表示速度は含まれず、プログラムの実行速度の差が反映されていると考えられます。

※ オーバークロックは、sentaro様作のアドイン Ftune 2 を使用しています。Ftune 2 については、こちら を参照のこと。




プログラムの比較

左が fx-5800P 用プログラム、その右に fx-9860GII 用に変更したプログラムを並べ、変更箇所を赤文字で示しています。

[2015/02/28 追記]
※ fx-9860GII へ転送して使えるプログラムファイル prime.g1m のダウンロード

素因数分解_改造版ソース PD2_9860GII_src 



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

人気ブログランキングへ


FC2ブログランキングへ


 

keywords: fx-5800P、fx-9860GII素因数分解、プログラム関数電卓

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


関連記事

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

コメントの投稿

非公開コメント

アドバイス感謝します

sentaro様

行列の確保に Dim を使う点、ありがとうございます。

fx-9860GII のマニュアルをスマホにダウンロードして、通勤中に読んでいます。たまに fx-9860GII 本体を取り出して操作したり...

本体は大きくて重いですが、背広やジャケットの内ポケットに入れて、色々とプログラムを作ってみています。

なんせ、入手してまだ3日目で、マニュアルも全部読みきれていません。

的確なアドバイス、本当にありがとうございます。

Casio Basic 以外にも fx-9860GII の特長が、少しづつ分かってきました。

ところで、USBに繋ぐと高速化するとのことですが、Ftune 2 の画面で見る限り、変化が見られませんが、123456789 の素因数分解は 3.3秒で、速度向上していますね。

No title

管理人様、こんにちは!

続々と移植記事すごいです!(^^)

写真が横に並ぶとfx-5800Pとfx-9860GIIの違いというか、似ている部分、そしてフォントの大きさとか縦横比とか一目瞭然というかそれぞれの特徴がよくわかりますね。


>・1行20列の行列確保: [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]→Mat Z

これはDimを使って、
{1,20}→Dim Mat Z
とする方が簡潔でしょうか。

配列はfx-5800PはZだけで単純ですが普通にスマートに記述できますよね。


計算速度の比較は、今回はほぼ内部演算速度の差なので電卓のCPUの速度差がそのまま出ますね。
fx-5800Pからノーマルなfx-9860GII、そしてオーバークロックしたfx-9860GIIでそれぞれ4~5倍早くなっているのが面白いです。

それでは、一番時間のかかる123456789だけですが、SH3の9860GとCG10の結果です。

SH3 OS1.05 10.1秒  (オーバークロック118MHz 4.1秒)
SH3 OS2.04 17.8秒  (オーバークロック118MHz 7.5秒)
CG10 OS2.00 23.0秒  (オーバークロック236MHz 8.3秒)

内部演算だけだと従来SH3機もCG10もわりと速いですね。
OS1.05はfx-5800P世代のCasioBasicなのでで機能が少ない分、速いです。

SH4のfx-9860GIIはUSB繋いでる時はさらにスピードアップしますし、バックライト付ければ若干遅くなりますし、なんか微妙にアナログな感じのする電卓です(笑)
最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

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


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

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

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


人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR