bob wrote:But the issue is that once a month has zero impact on the tree search result. Once a day has zero impact. Even once a minute has zero impact. Verified with two different chess programs. One false match per million nodes searched had no effect.
So adding 64 bits and doubling the computational cost only reduces something that is already zero...
Your argument would be stronger if only scores or bounds are stored.
But when also storing moves, using 128 bit signatures means no need for running move sanity tests on each move retrieval. I'll bet that the time saved by skipping sanity testing is much more than the time spent on shoving around an extra eight bytes here and there.
When my programs went from 64 bit to 128 bit signatures, I tossed the move sanity test code. But I remember that it was non-trivial because of special case moves and that even a fast path through would hit several conditionals:
1) Origin square must have STM man.
2) Destination square must be vacant or have non-STM man.
3) CanMoveTo(origin, destination) to be proven.
Number three also needs an make/unmake test if subsequent logic expects legal-only moves.
That's all bug magnet code. The only simple way to code a sanity test is to generate all the moves and see if one matches.
I'll stick with 128 bit signatures instead. I suppose that could be cut down to 96 bits, going from a 350 million year MTBF to a 60,000 year MTBF.