夏向きに部屋を模様替えする

風呂に入って洗濯した.気温が高かったので三度続けて洗濯ものを乾かすことができた.一度目はレースのカーテン,二度目は厚地のカーテン,三度目は予備のシーツその他.間仕切りに使っていた大きなポンチョは以前浴室にあった白いビニールのカーテンに交換した.東側の出窓を塞いでいた棚は壁際に移動して窓を開放したのでだいぶ風通しがよくなった.今年もまた猛暑になりそうだが,これでなんとかしのげるだろう.石油ストーブを片付けて靴箱も整理した.最近はあまり歩いてないので普段はしまっておくことにする.

PowerResidueFuncが生成する剰余数列と従来論理のFindOutCycleで出力する剰余数列とがまったく一致しない.FindOutCycleの方が正しいと思われるので,PowerResidueFuncの論理がどこかで間違っていることになる.ともかく,これらが一致するようにしなくてはならない.FindOutCycleでは最初にRTをmaxまで初期生成している.つまり,R(i) = BigInteger.ModPow(num, i, K)だ.これは剰余数列を生成する手順そのものなので,疑問の余地はない.PowerResidueFuncでは論理を逆数周期列と共有するためにあれこれ小細工が入っている.この工作が仇となっているものと思われる.オリジナルではR()は{0, 4, 2, 1, 4, 2, 1}のようになっている.一方,改訂版で{0, 1, 2, 0 4, 0, 0, 4}だ.

これはオリジナルでは発生順にR配列に格納しているのに対し,改訂版ではハッシュ表になっているためだ.別途テーブルを作って受け渡しするようにした.これで齟齬はなくなった.ただし,現行では循環が検出された時点で打ち切っているため,数列の長さはKよりも短い.⇒正しく動作するようになった.あとは,基本的に動作確認と使い勝手の向上だけだと思う.⇒まだ表示されていない項目があった.(N, B)だ.これはTextBox4に入っている.⇒DispInvertで表示しているのだが,呼ばれていない.⇒DUMPNUMSTRINGという制限が掛かっていた.

一文字変数名をいくつか変更した.N→n, @→#,#→@など.#という記号は剰余類群の位数の意味で使われることがある.#は剰余数列の周期だが,ほぼ位数に一致するので,こちらで使うのが適切ではないかと思う.これまで使っていた@は循環小数の循環節の桁数の方に回すことにした.この方がなんとなく感じがつかめるのではないかと思う.

出力保存に関してはもう少し手を入れる必要がある.⇒DispInvertを止めたのは表示に時間が掛かり過ぎるからではないか?(N, B)だけを別途出すようにした方がよさそうだ.マトリックスは260を上限としていたが,Int64の範囲で対応することにした.ただし,配列には上限があり,それ以上にテーブルを構築するのに無闇に時間が掛かるので,テーブルは128 x 128 までとすることにした.これで一応実用時間内で大概のことができるようになり,後はファイル保存だけになった.

従来はデスクトップに固定ファイル名のログファイルを出力するという方式だったが,ファイル名とパス名を指定できるようにすることにしたので,それを格納しておく方法が必要になってきた.レジストリに書き込むか,ないし構成ファイルに保存するということになるが,レジストリのIOはすべてC++で書いているので,ちょっとここではアクセスできない.構成ファイルは常備されているが,従来のINIファイルはすでに廃れていて,XMLのapp.configというのを使うことになっている.

構成ファイルをプロジェクトに追加するところまではできたが,(と言っても結構つまづいた)form1_loadで読み込もうとすると,

Configuration system failed to initialize

のようなエラーになってしまう.ネットで探してみたが,なかなか出てこない.最後に以下のURLに

In the App.config file, I deleted all the contents of the ‘system.diagnostics’ tag. I no longer have an error detected in the Settings.Designer.vb file when reading the setting.

というアドバイスがあったので試したところ,一発で解決した.

https://github.com/dotnet/project-system/issues/6784

コメントを残す

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

CAPTCHA