Author: Dieter Buerssner
Date: 11:44:46 07/04/03
Go up one level in this thread
On July 04, 2003 at 14:26:42, Normand M. Blais wrote: >On July 04, 2003 at 14:11:02, Dieter Buerssner wrote: > >>On July 04, 2003 at 13:56:09, Normand M. Blais wrote: >>> int sq = (*str - 'a') + (8 * (8 - (*(++str) - '0'))); >I agree with you that he first version is problematic. Norman, it is not only problematic, it is just wrong (I hope, it does not sound offensive, it shouldn't) >But I was thinking that >pointer arithmetic would be fast. This is with today's hardware/compilers probably more often wrong than correct. Such advice may come from old PDP 11 days, where the compilers where not well optimizing, and which had pre and postincrement instructions. Some modern hardware may need to do some pointer arithmetric with this task, but for example x86 can perfectly fast fetch a value at an increment (especially when it is constant). Still pointer arithmetics sometimes will be faster. I suggest to use pointer arithmetics, when it fits more the algorithm (say for example to traverse a move stack), and indices when it fits more (say for a scalar product of 2 vectors). To make the behaviour defined: int sq = *str - 'a'; /* For very pedantic people, this is not totally portable, because ISO C does not guarantee, that all letters are contigious */ sq += 8 * (8 - (*++str - '0')); /* Numbers, however are always contigious */ Most probably this will run not faster, and possibly slower than the more obvious, and easier to read second choice you made. BTW. *str and str[0] are exactly the same, as are *(str+1) and str[1]. Regards, Dieter
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.