Author: Uri Blass
Date: 12:42:13 05/27/04
Go up one level in this thread
On May 27, 2004 at 15:09:42, James Swafford wrote: >On May 27, 2004 at 14:35:54, Uri Blass wrote: > >>On May 27, 2004 at 07:39:37, milix wrote: >> >>>Hello! >>>Chess enging bugs (CEBUGS) are very different than normal bugs (BUGS). They are >>>very good in hiding from debuggers. They are also very good in covering one >>>another so the engine seems to behave normaly, except if it plays a very >>>important match. Sometimes CEBUGS are very productive and when they are >>>eliminated the engine's strength drops about 50-150 points. Of course they have >>>to be eliminated otherwise the engine cannot deliver a mate in KQvsK or it >>>always thinks that passed pawns are Gods. CEBUGS are also layered and they are >>>very cooperative. In the first layer we have the evaluation bugs (usualy + >>>instead of -). In the next layer we can find search bugs (improper alpha - beta >>>windows, or wrong score sign or null-move bugs). In the final layer we meet the >>>most powerful bugs ever, the transposition table bugs. These bugs have a stealth >>>ability, they are protecting the bugs in the first two layers while their >>>actions mimic the behaviour of an evaluation term or a search property (like >>>failing low). >>> >>>I am sure that other bugs exists in my engine but I haven't had the honor to >>>meet them yet. >>> >>>PS: In the Null-Move search you might have forgotten to clear the ep-square as >>>well as to restore it. This bug is very easy to detect and fix. But if you have >>>forgotten to update the hash signature (if you encode ep square in the hash >>>signature) then you are very lucky. You have met a Predator-like bug. >> >>I did some progress in making my book code(it is still not ready at this moment) >>and I can describe some bugs in the process: >> >>1)I asked the computer to print the moves in the book only to discover that >>printf("%s %s",move1,move2) does not work. > >Are move1 and move2 char* 's? If so, that should be fine. >What's happening? > > >-- >James I do not know but for me it did not work and the computer printed the first string twice instead of printing 2 different strings. Try the following code that is part of movei: #define rankfrom(u) (((u)>>3)&7) #define rankto(u) (((u)>>9)&7) #define filefrom(u) ((u)&7) #define fileto(u) (((u)>>6)&7) #define promotion(u) ((u)&(1<<29)) #define promote(u) (((u)>>16)&255) char *move_str(int move) { static char str[6]; char c; if (promotion(move)) { switch (promote(move)) { case KNIGHT: c = 'n'; break; case BISHOP: c = 'b'; break; case ROOK: c = 'r'; break; default: c = 'q'; break; } sprintf(str, "%c%d%c%d%c", filefrom(move) + 'a', rankfrom(move)+1, fileto(move) + 'a', rankto(move)+1, c); } else { sprintf(str, "%c%d%c%d", filefrom(move) + 'a', rankfrom(move)+1, fileto(move) + 'a', rankto(move)+1); } return str; } printf("%s %s",move_str(1),move_str(0)); //result b1a1 b1a1 printf("%s %s",move_str(0),move_str(1)); //result a1a1 a1a1 Uri
This page took 0.01 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.