だいぶ整ってきた

だいぶ整ってきた.

image

対象数値ないし除数,基数を変えると自動的にボックス内の数値を更新するようになっている.除算を実行して余りがある場合にはGCMは1より大きく,割り切れるときにはGCMは除数そのものになる.notationの欄ではB進表記した数を入出力できるようにしたいのだが,まだ実装されていない.画面下部の剰余数列のブロックではkないしnをある範囲で変化させて周期数列を生成しているが,単点のn^p mod k という値を取り出したい場合もあるので,個別に計算できるようにした.ボタンの数は大幅に減って上段では,①PrimeTest, ②SeedTest, ③Invert と④Clear だけになった.これらの処理の内容はまだかなり整理が必要だが,大枠は完全に固まったといってよい.

対象数値をLongの範囲とするという制限は撤廃することにした.どうしても制限が必要な場合は出てくるかもしれないが,原則として無制限としておきたい.重くなる原因としてダンプ文字列が長くなることがあるかもしれない.コラッツのときは文字数制限してある分量を超えると捨てるようにしていたが,かなり効果があった.ただし,ファイル出力を選べばダンプをファイルに保存できるようになっていたので,その機能は必要かもしれない.出力パネルはもう少し横幅があった方がよい.

InvertFuncはPrimeTest, SeedTestからも呼び出している.ダンプの量が多いので,Invertコマンドの場合以外はこれらの値をダンプしないようにした.ただし,ファイルには出力する.逆数の循環数列を設定パネル上に表示して Invertボタンを廃止することも考えたが,対象数が4桁を超えると相当な桁数になってしまうので,現実的ではない.詳細はInvertボタンで表示し,PrimeTestやSeedTestでは隠蔽するというのが妥当だ思う.ディテールはまだまだ整備しなくてはならないが,最後の関門 notationへの変換・逆変換をやっつけてしまうことにしよう.

Convert.ToStringは基数が2, 8, 10, 16の場合しか扱わない.それ以外では例外が発生する.これは自前で作るしかない.ToBCDという関数も思ったような動作にならないので,丸ごと書き換えた.⇒動くようになった.かなりおもしろい.基数の範囲は2~62とした.アルファベットのA~Zとa~zに別々の値を与えて,最大でzzzzzzz…のような数まで表示できる.あとは,これを表記から数値に変換する処理を組み込むだけになった.ただし,こちらはユーザ入力から数値に変換するので,エラーに対処する必要がある.

いや,このエラーは無視してもよい.特に動作上のエラーにはならない.たとえば,2進数列に2という数字が紛れ込んだ場合には,2×2の値がその桁にあるとして計算するだけだ.10進に戻って,もう一度2進で表示すると正しい2進数列になっている.

16という数が入力できない.(6をBSで消去して再入力しようとして)1はBのレンジに入っていないため,弾かれてしまうようだ.⇒1を範囲に加え無処理で抜けるようにした.

N進数への変換・逆変換はほぼ仕上がったようだ.基数は最終的に2~64まで対応ということにした.62でzまで使い切るので,64の場合には{と|が余分に使われる.もし,その進数の範囲を超える文字が入力された場合には,直ちに変換して正しい数字列に書き換わるので,その文字が使えないことを指摘しなくてもよいだろう.あと,残った課題は,①3種の検定の出力を整理して使い易いものにする.②巨大数でハングしないように適切な例外処理を入れる,の2点だけになった.そのあとは,このツールをどう活用するか?というフェーズに入るが,おそらく因数分解の効率化というところから入ることになるのではないかと思う.相当強力なツールになったので,役に立つと思う.

3種テストの方はすべて出力をファイルに保存できるようになっているが,剰余の方は残っている.こちらも保存できるようにした方がよい.ただし,こちらはあまり長いダンプは出ないので,画面からコピーするだけでもよいかもしれない.ファイルを開いて追加出力できればよいのだが…惜しむらくは,文字が少し小さ過ぎるという点ではないだろうか?いまさらフォントサイズを変えるという訳にもゆかないが,もう一回り大きければだいぶ楽だったのではないだろうか?⇒完成間近なのでアイコンを見つけなくてはならない.⇒いまいちパッとしないが,これ「 image 」 でいくことになった.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA