出荷直前というモードには入っているが…

出荷直前というモードに入っているが,まだ遠い.

関数名にギリシャ文字を含むというのはあまり美しくない.配列名と読み間違えることもある.⇒Λ()という関数はLambda()に変更した.ΛFunctionはLambdaFunction に変更する.

α=2,γ=244のとき,MatrixTestで配列サイズオーバーが出た.⇒sumh()で起きている.配列サイズをmaxcolumsで指定していた.⇒maxに改めた.また,配列を使い回ししていないときは,Array.Clearは不要と思われる.

TestMatrixでDumpMatrixを実行するようにしたが,時間が掛かり過ぎる.∑だけを表示するようにしてみたが,同じだ.DumpMatrix自体を取り止めるしかない.⇒BuildMartixの中でもDumpMatrixを実行していた.しかし,それを止めると何もダンプされなくなってしまう.⇒止めてあった「縦軸と横軸の異種文字数の分布を比較」を復活させた.今回は,暫定的にここまでとしておく.

異種文字数に関連して,2023/05/15に「文字数xGCMは k-1 に一致することを確認する」という項目がある.これはγが素数の場合に限られているようだが,チェックする必要がある.異種文字数が一致するというのも素数に限られているようだ.多分,この証明は容易に得られると思う.γが素数の場合「(異種)文字数xGCMは k-1 に一致する」のは当然だろう.γ=Pであるとすれば,異種文字数=周期数列=p-1でGCMはつねに1となると考えられるからだ.異種文字数=γ-1となるための条件はγが原始根を持つことであり,非素数でもそのような場合はあり得る.

γが素数の場合は横数列と縦数列で異種文字数の分布が完全に一致する.つまり,異種文字数のリストが順序を無視して一致する.γが非素数で原始根を持つ場合はどうか?⇒Test Matrix を使って調査する.

TestMatrixでは結局異種文字数のカウントしかしていなことになるが,このテストが意義のあるものになるよう結果を整理する必要がある.

updateで出力されるパラメータを見ておこう.「αとγが互いに素でΛ数が立たない場合」という表示が出ている.γが1の場合は除外してもよいだろう.DispNotationが計4回出てくる.DispNotationの呼び出しは,①ValueChangedPro,②DispInvertFunc,③valueBetaChangedで出てくる.①は不要と思われるので止めておこう.⇒DispNotationでダブって表示していた.⇒updateでは画面上のデータをすべてダンプするという形式でよいのではないかと思う.このとき,計算値ではなく,画面上のデータを拾い出して出力するだけでよいのではないか?その方が整理されて分かり易いのではないか,データは網羅的である必要もある.

B面に数字和と数字根を出すことも考えられる.しかし,この2つだけでは一行が埋まらない.もう一つくらいあるとよいのだが… βの素因数は出してある.φ(β)が出ていないのは片手落ちの感じもするが,βはかなり小さい数字なので意味があるかどうか?Λという数は,現在Lamda(α, γ)として取り出しているが,Λβ=Lamda(α, β)というのもあるのではないか?ただし,βの場合はβが基数とも見られるので,Λβ=(β, α)となる可能性もある.⇒最初にすべての出力をverboseで止めておこう.⇒何も出なくなった.ValueChangedProからは,ResidueFuncProをsilent=Trueで呼び出すようにした.

「互いに素でないのに1の項」というメッセージが出た.α=34 γ=18 初項=16 (α, γ)=2 one=1 zero=14 overflow=False.ε=115,β=10.α=37, 39でも出ている.αを変化させただけでは発現しない.このメッセージはDispResidueCycleが出している.どうもこれは,誤動作ではないかという気もするが… ⇒計算がまったく合っていない.検定中のダンプと検定終了後の画面では内容がまったく違う.⇒おそらくValueChangedProを呼び出したあとで障害が発生しているのだろう.アウトプットは画面の内容を転写しているだけなので不一致が生じる可能性がある.テスト中に画面を書き換えていない場合は参照できない.

αの因数が出力されていない.⇒いや,出ている.順序が違うだけだ.

これはかなり由々しき問題だ.⇒再現した.αを39固定とし,γを小さい数から31まで増加させて発生した.表示ではγ=31となっているが,エラーメッセージではγ=30となっている.このエラーはεないしγの値変更イベントから実行されている.上ではγを増加させてとしているが,逆のようだ.31→30の書き換えだろう.⇒ダメだ.再現しなくなってしまった.かなり厄介なことになった.どうもこれはタイミングの問題ではないかと思う.つまり,連続したイベントが重複して処理されているため整合しなくなっているのではないだろうか?

上記の再現テストをやっていて,配列サイズオーバーが起きた.

image

RSという配列で起きている.RSのlengthは34,i=34だ.max2=47でiは範囲内だ.RSは呼び出し元で生成されているが,max2も引数で渡されているので,範囲内に入っているはずなのだが… 呼び出し元のResidueFuncProではmax1=47でPRCycle(47+1)で生成している.PRCycleはシステムに常駐する配列でこの配列をReDimしているのはResidueFuncProだけだ.ResidueFuncProでは引数のnumでαを更新している.これはかなり問題がありそうだ.⇒確かにResidueFuncProがネストして実行されている.K_TextChangedではpassflagを見ているが,立ててはいない.しかし,passflag1本でコントロールするのは難しいと思われる.むしろ,内部に静的変数としてフラグを持たせた方がよいのではないか?⇒収まったようだ.これ以外の数値ボックスの動作もチェックしておこう.⇒総点検し整備した.

MakeRecursionUnitで「γが素数で原始根にならない場合」というのが発生している.γ=43でα=39.固定桁と#,およびgcm(γ, #)に値が入っていない.この現象はβ値を連続的に変えているときに起きた.β=10から増加方向に変化させるとこのエラーが続く.マトリックスが間違っていないとすれば,この動作は正しいということになるのだが… いや,まったく正しい.「r^λ≡1 mod γとなるような最小の整数をrの位数Λと呼ぶ.Λ=γ-1のとき,rをγの原始根と呼ぶ.」当然,γが素数でも原始根にならないαはいくらでも存在する.βを変更しても,αとγの関係は変わらないので連続して,このメッセージが出てきたというだけだ.このメッセージは止めてよい.一応,Λがγ-1でないことだけはチェックしておくことにしよう.

γ=43の場合は,{3 5 12 18 19 20 26 28 29 30 33 34}の原始根がある.⇒Matrix Testでは原始根のリストを出力すべきだろう.ないし,BuildMatrixでマトリックスを生成するタイミングで情報を出力してもよい.⇒一番手っ取り早いのは,異種文字数をマトリックスに表示することではないだろうか?異種文字数がγ-1であるような行は原始根であると言える.⇒マトリックスの末尾桁/行に異種文字数を出しておこう.

▲γ=43, α=1, 2, 4, 8などでは逆数の循環桁数はゼロとなり,U, αU,Ξは空欄になっているのに,レピュニットがTRUEになっている.

コメントを残す

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

CAPTCHA