Author: Filip Tvrzsky
Date: 13:17:02 05/27/04
Go up one level in this thread
On May 27, 2004 at 15:42:13, Uri Blass wrote: >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 is an easy one: your strings share one common place in memory, namely the variable static char str[6]. Therefore when you call move_str() for the second time, the first string gets overwrited. Filip
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.