Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: unique distance relationship

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.