だいぶ目鼻が整ってきたように思われる

なかなか進まない.てか,もっと大胆にフィックスして行ってよいのではないか?というより,ほとんどフィックスしているような気もする.

N=1, K=1でPrime Testを実行して,Count cannot be less than zero エラが発生した.⇒MakeDecimalStringでmaxfixedがゼロになっているため,エラーが生じていた.maxfixedが0のときは1に書き換えるようにした.B=1のときは,maxfixed-1だけ0を並べるようになっているが,N=1の場合は0で回ってきているため.fixedの値はInvertFuncが決めているが,B=1の場合には,fixed = n-1 になっている.いや,おかしい.B=10だ.MakeDecimalStringではB=1で呼び出されていたはずだ.PrimeTestは1~Bまでの範囲のテストを実施しているためだ.

ある範囲を包括的にテストする場合には,範囲を設定できるようにした方がよい.PrimeTest, InvertTest, SeedTestはすべてこのカテゴリに入る.⇒大体動作するようになった.現行ではBとψが連動しているが,ψとBは切り離した方がよい.ψを決定するのはKでなくてはならないと思われる.⇒ダンプ時にψ(N)ないしψ(K)などのように明示すればよい.

ValueChangedの中ではBにアクセスしないようにしたいのだが,可能だろうか?ValueChangedの後半ではInvertFuncを呼び出して,循環節を生成しているので完全に排除することはできないが2つに区分することは可能なのではないか?DispMovePowでは何をやっているのだろう?この関数は単にN^P mod K を計算しているだけだ.⇒一つエラーが出ていたのだが,再現しなくなってしまった.しかし,だいぶ話がまとまってきたのではないかと思う.顕著なところは,ψ数が2つ必要になってきたという点だ.ValueChangedの前半と後半を分離して,前半ではKを用い,後半ではBを用いるようにしているので,ψもそれに応じた値を計算する必要がある.これで目鼻が少し付いてきたのではないかと思う.

現行ではValueChangedでは剰余数列周期を計算していないが,これを求めて表示するようにしておこう.ResidueFuncは剰余マトリックスに依存していないので,単独で実行することが可能だ.DispModPowという関数があるので,この中から呼び出すようにしてみよう.⇒だいぶいい感じになってきた.弁慶の泣き所と言えば,Nが8桁を超えるとがくっと重くなるところだけだ.こればかりは右から左という訳にもゆかない.ResidueFuncが加わったのでなおさらだ.どこかで処理を統合するということも考えられる.類似アルゴリズムを使っているところでは,優劣を見極める必要もあるだろう.

コメントを残す

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

CAPTCHA