Author: Vincent Diepeveen
Date: 09:00:58 08/17/02
Go up one level in this thread
On August 15, 2002 at 17:13:23, Gerd Isenberg wrote: >On August 15, 2002 at 16:40:49, Leen Ammeraal wrote: > >>This is excellent! Thanks. >>Leen > >Thanks back, Leen > >glad about it > >just an idea, not yet implemented ... > >I wrote a small command line program to print out some A*distance+1*taxidist >combinations, where A+1 is power of two, and i'm stil playing around with it. > >One more piece of information may fit inside the UDR_Dist[64][64] Array at the >right (bit)place, whether both squares have same colors or not. One Shift left >(*2) and there is place for a new LSB. This becomes the semantic of "opposite >square color". It takes into account, that a queen on an opposite colored square >has less possibility in average to reach the other square (on same color the >queen may have two consecutive diagonal moves) and therefore is 1/32 more far >away :-) > >UDR_Dist[0] > 16 33 64 97 128 161 192 225 > 33 48 67 98 131 162 195 226 > 64 67 80 101 132 165 196 229 > 97 98 101 112 135 166 199 230 > 128 131 132 135 144 169 200 233 > 161 162 165 166 169 176 203 234 > 192 195 196 199 200 203 208 237 > 225 226 229 230 233 234 237 240 > > x10 x21 x40 x61 x80 xA1 xC0 xE1 > x21 x30 x43 x62 x83 xA2 xC3 xE2 > x40 x43 x50 x65 x84 xA5 xC4 xE5 > x61 x62 x65 x70 x87 xA6 xC7 xE6 > x80 x83 x84 x87 x90 xA9 xC8 xE9 > xA1 xA2 xA5 xA6 xA9 xB0 xCB xEA > xC0 xC3 xC4 xC7 xC8 xCB xD0 xED > xE1 xE2 xE5 xE6 xE9 xEA xED xF0 > >If you want, they stil fit into an unsigned char. One and-operation and one >compare, to detect "same line" or "diagonal". The three MSBs stil represent the >distance. > >bool isOpposition(int sq1, int sq2) { > return combidist[sq1][sq2] == 64;} > >bool isKnightDistance(int sq1, int sq2) { > return combidist[sq1][sq2] == 67;} > >bool sameSquareColor(int sq1, int sq2) { > return (combidist[sq1][sq2] & 1) == 0;} Instead of slow array lookup we can do it within a few processor cycles too (RISC type cpu's, not P4, as shift hell slow at it). Just from head typed in to show the idea, you can compute it faster however: int s1a=(sq1>>3),s1b=(sq1&7),s2a=(sq2>>3),s2b=(sq2&7); int NotSameSquareColor .. return( ((s1a+s1b)^(s2a+s2b))&1 ); Let's see: 2 shift instructions 3 ands 1 xor 2 adds -- 8 instructions That's like 2 clocks on the k7? L2 cache not to mention that you run the risk of a 400 clocks main memory reference is way more expensive. Future processors will do more instructions a clock don't you also assume that? Knightdistance i didn't look at yet, but a table of 64x64 is definitely too big for it. Best regards, Vincent >Ok, there are lot of other ways to do it, but i like the information >"overloading" of this distance values. And i have a lot of lines inside my >program with this (dist == A && taxi == B) statements. > >Cheers, >Gerd
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.