[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00655] Re: 仕切り直します。
- Subject: [FDclone-users:00655] Re: 仕切り直します。
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sat, 11 Nov 2006 22:05:22 +0900
しらいです。
In Message-Id <20061111201903.816395.2b524bad@isis.ocn.ne.jp>
yuji tamura <yuji@isis.ocn.ne.jp>さんwrites:
> こんばんは、田村です。
> 今日は私一人出勤で、留守番のような格好でしたので、先日の
> 宿題をやって見ました。やりながら書いたので、
> 継ぎ継ぎですが、取りあえず報告します。
うーん、何だかうまく意思疎通が図れなくて何とも歯がゆい思い
ばかりですが、ちゃんと検証出来たところだけでも続けましょうか。
他はどうも期待どおりの結果は得られそうにありませんし。
> -----browse.c-----867line~
> buf = malloc3(n_lastcolumn * KANAWID + 1);
> tm = localtime(&(filelist[filepos].st_mtim));
> -----browse.c-----
>
> この部分を変更した時に、ファイル名が消えなくなったようです。
> 日本語、ASCII ファイル名ともに消えないようです。
今後はここに的を絞って検証してみましょうか。この 867 行目
の malloc2() に関して色々試してみます。
まずはこの n_lastcolumn の値を調べます。こんな感じの追加を
行なって値を表示させてみましょう。
-----browse.c-----867line
yesno("Column=%d", n_lastcolumn);
buf = malloc2(n_lastcolumn * KANAWID + 1);
tm = localtime(&(filelist[filepos].st_mtim));
-----browse.c-----
起動すると「Column=80」のようなダイアログが表示されるので、
「y」を押して先に進めて終了して下さい。この例だと「80」にな
っていますが、この数値をここでは仮に x とします。
x の値が判ったら上の追加は削除して素の FD-2.09 の状態に戻
します。次はこの malloc2() の中身を幾つにしたら症状が無くな
るのか調べます。
-----browse.c-----867line
buf = malloc2(80 * 2 + 1 + 100);
tm = localtime(&(filelist[filepos].st_mtim));
-----browse.c-----
この例で「80」になっている箇所は上で調べた x の値にして下
さい。「100」になっているを色々変えて試しますが、まずはこの
例のとおり「100」でいいでしょう。
もし「100」で試行しても再現したら、この値を「200」→「400」
→「800」と倍々に増やして再現しなくなるまで続けて下さい。そ
の再現しなくなった時の値を max とします。
ここからは binary search の手法を使って境界となる値を調べ
ていきましょう。以下の説明がどうしても理解出来なかったら、こ
の値を max から一ずつ減らして再現するような値を探して下さい。
でもそれだと膨大な時間がかかるので、再現することが判ってい
る値と、再現しないことが判っている値との平均値を調べることで
探索空間を狭めていって、再現する値を調べることが出来ます。
今 max の値は上で調べました。同時に min の値を「0」として
下さい。これが素の FD-2.09 の状態になるので、再現すると判っ
ている値になります。
最初は (min + max) / 2 の値を試してみます。min = 0, max =
100 ならば「50」を試すことになります。
これで再現したら min (= 再現することが判っている値) を「50」
に置換えます。再現しなかったら max (= 再現しないことが判って
いる値) を「50」に置換えます。
min もしくは max を置換えたら、(min + max) / 2 の値も更新
されるので、今度はその値を試してみてその結果に応じて min/max
を置換えます。
これを何度か続けていけば、いつか収束して max = min + 1 と
いう関係になる筈です。この時、値を max にすると再現しなくな
ってそれより 1 でも少ないと再現することになります。
この境界 max の値と、元の x の値を報告して下さい。多分、丁
度整数倍になってるんじゃないでしょうかね。
しらい たかし