const Value FutilityMarginQS = Value(0x80);
// Each move futility margin is decreased
- const Value IncrementalFutilityMargin = Value(0xA);
+ const Value IncrementalFutilityMargin = Value(0x8);
// Remaining depth: 1 ply 1.5 ply 2 ply 2.5 ply 3 ply 3.5 ply
const Value FutilityMargins[12] = { Value(0x100), Value(0x120), Value(0x200), Value(0x220), Value(0x250), Value(0x270),
&& move != ttMove)
{
//std::cout << std::endl;
- //for (int d = 2; d <= 14; d+=2)
- // std::cout << d / 2 << ", " << 3+(1 << (3*d/8)) << std::endl;
+ //for (int d = 2; d < 14; d++)
+ // std::cout << d << ", " << 64*(1+bitScanReverse32(d*d)) << std::endl;
+
//std::cout << std::endl;
/*
+ 64*(1+bitScanReverse32(d*d))
+
+ 2 -> 256 - 256
+ 3 -> 288 - 320
+ 4 -> 512 - 384
+ 5 -> 544 - 384
+ 6 -> 592 - 448
+ 7 -> 624 - 448
+ 8 -> 672 - 512
+ 9 -> 704 - 512
+ 10 -> 832 - 512
+ 11 -> 864 - 512
+ 12 -> 928 - 576
+ 13 -> 960 - 576
+
+ 300 + 2*(1 << (3*d/4))
+
+ 2 -> 256 - 304
+ 3 -> 288 - 308
+ 4 -> 512 - 316
+ 5 -> 544 - 316
+ 6 -> 592 - 332
+ 7 -> 624 - 364
+ 8 -> 672 - 428
+ 9 -> 704 - 428
+ 10 -> 832 - 556
+ 11 -> 864 - 812
+ 12 -> 928 - 1324
+ 13 -> 960 - 1324
+
+
3 + (1 << (3*int(depth)/8))
1 * onePly - > moveCount >= 4
{
if (futilityValue == VALUE_NONE)
futilityValue = evaluate(pos, ei, threadID)
- + FutilityMargins[int(depth) - 2]
- + 4*IncrementalFutilityMargin;
+ + 64*(2+bitScanReverse32(int(depth) * int(depth)));
futilityValueScaled = futilityValue - moveCount * IncrementalFutilityMargin;