Author: Stuart Cracraft
Date: 14:02:48 02/22/06
Go up one level in this thread
On February 22, 2006 at 16:53:37, Roman Hartmann wrote:
>On February 22, 2006 at 16:48:10, Stuart Cracraft wrote:
>
>>Pardon my blindness but I've been doing this too long.
>>
>>I wrote a quick perft which is buggy.
>>
>>It gives 20 for perft(1) but 420 for perft(2) - should be 400.
>>
>>It is:
>>
>>void perft(int *bd,int depth)
>>{
>> int mvi;
>> mv ml[MAXMOVES];
>> if (depth<=0) return;
>> genmv(bd,ml,stm,NOSORT,SEENOTOK);
>> mvi = 0;
>> while (ml[mvi].from != -1) {
>> makemv(bd,ml[mvi]);
>> if (!incheckopp(bd)) {
>> totalnodes++;
>> perft(bd,depth-1);
>> }
>> unmakemv(bd);
>> mvi++;
>> }
>>}
>>
>>The call is
>>
>>totalnodes = 0L;
>>perft(bd,maxdepth);
>>printf("nodes visited = %ld\n",totalnodes);
>>
>>Apart from the obvious that there could be a bug in my genmv(),
>>is there anything about the above that would produce 420 instead
>>of 400 for perft(2)?
>>
>>Thanks,
>>
>>Stuart
>>
>>P.S. I am working sick (and coding sick) for about 19 days now (flu,
>>pneumonia, bronchitis) and am not seeing very obvious things which I
>>would hope this is.
>
>420 nodes sounds not too bad as this is the total sum of nodes up to depth 2.
>perft 1 gives you 20 and perft 2 gives you 400 (420 - 20), so your numbers are
>right.
>If perft 3 gives you 9322, everything is fine.
>
>Roman
At http://www.albert.nu/programs/sharper/perft.htm, the author
says he has verified perft(up to 10) with a variety of engines as:
Initial position rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Depth Perft value
1 20
2 400
3 8902
4 197281
5 4865609
6 119060324
7 3195901860
8 84998978956
9 2439530234167
10 69352859712417
So it is in disagreement for 3 with 9322.
When I run my perft(up to 5), I get
1 20
2 420
3 9322
4 206603
5 5072212
So now I am more confused. What's right? Who's wrong?
--Stuart
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.