Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: By the way, here is an instance where crafty's node counts truncate

Author: Robert Hyatt

Date: 13:25:44 09/26/99

Go up one level in this thread


On September 26, 1999 at 14:07:03, Heiner Marxen wrote:

>On September 23, 1999 at 09:53:00, Robert Hyatt wrote:
>
>>On September 23, 1999 at 05:00:04, Andreas Stabel wrote:
>[snip]
>>>This is approx. how I have done it in my program:
>>>
>>>#define BITBOARD __int64
>>>
>>>char * outdlong(BITBOARD oval)
>>>{
>>>   BITBOARD h1, h2;
>>>   int i, negflag;
>>>   static char obuff[32];
>>>
>>>   i = 30; negflag = 0;
>>>   if (oval < 0) { negflag = 1; oval = -oval; }
>>>   for (;;) {
>>>      h1 = oval / 10;
>>>      h2 = oval - (h1*10);
>>>      obuff[i] = (char)(h2+ '0'); --i;
>>>      if (h1 == 0) break;
>>>      oval = h1;
>>>   }
>>>   obuff[31] = 0;
>>>   if (negflag) obuff[i] = '-'; else ++i;
>>>   return(&obuff[i]);
>>>}
>>>
>>>char outbuf[...]
>>>
>>>sprintf(outbuff,"something %s something ...",,,,outdlong(myvar),,,);
>>>
>>>Of course in this implementation you should be careful not to use the
>>>outdlong routine twice without copying the output string since the static
>>>variable obuff will be overwritten.
>>>
>>>Regards
>>>Andreas Stabel
>>
>>
>>that works, but you can't use it twice in one printf()...  ie in my case, I
>>would need multiple 64 bit ints, one for nodes, one for evals done, one for
>>hash probes, one for pawn hash probes, several for search extensions...  you
>>have to print such lists one entry at a time because of the static buffer you
>>use.  I do this for "DisplayEvaluation()" and it is a headache...
>
>That can be solved.  Say, you want at most 8 such conversions to be used
>in one printf (between 2 sequence points).  Just use an 8-element array
>of such static string buffers, with a static index for the next to use
>element, cyclically walking through the 8 buffers.  I've done that,
>and found it to be a great help.
>
>Sometimes I've used "double" for counters to achieve 53 bits of integer
>precision, and print them with "%.0f".
>
>Heiner


it would work, but it is a very sloppy programming approach.  IE imagine what
happens when you use this  piece of code to display more than 8 values at one
time when you are debugging one day. And you forget that you have that 8 number
limit, and spend a lot of time debugging something that isn't a bug, because the
output is corrupted...

as the saying goes, "been there, done that, but _not_ doing it tomorrow..."

:)




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.