つれづれなるままにボナソースを読んでいますが、ちょっと気になる点があったのでメモ。
hash.cのhash_store()の以下の部分ですが、
1 if ( hand_hash != HAND_B
2 && keyt_hash != ( word2 & ~(uint64_t)0x2fU ) )
3 {
4 slot = (unsigned int)hash_word2 >> 31;
5 SignKey( hash_word2, hash_word1 );
6 ptrans_table[index].always[slot].word1 = hash_word1;
7 ptrans_table[index].always[slot].word2 = hash_word2;
8 }
9 SignKey( word2, word1 );
10 ptrans_table[index].prefer.word1 = word1;
11 ptrans_table[index].prefer.word2 = word2;
探索結果をpreferに書く(10,11)んだけど、今のpreferの内容はalwaysにコピーする。ただし、書こうとしている結果が今のpreferと同じ局面に対するもの(より深い探索結果)ならalwaysへのコピーはしない、ってことだろうと思うんですが、
もしそうなら、if条件(1,2)でhandのチェックは不要、というかやらない方がいいんじゃないでしょうか?keyが違えば盤面が別なので、handが同じかは意味ないと思うんですが。
盤面が同じでhandが違う、という場合は書くべきかどうか微妙な気はしますが、そうしたいならばif条件は&&ではなくて||ですよね。
見てるのはv4.1.2ですが、v4.1.3でも変わってないようです。
ということでたぶんバグなんじゃないかなぁ?という気がしてはいるのですが、なにしろあのボナンザなので、私が何か勘違いしてるのかも?という気もしないでもないです^^;
まあここを変えてもそうドラスティックに強さ変わるわけではないとは思いますが、「盤面異なるが持ち駒は同じ」局面群に対してはpreferしか使わないことになるので、そこそこ発生するような気はします。
それにしても、なんでボナンザってコメントないんでしょうか?w 深まる謎がぜんぜん解決しない…
最近のコメント