patterns.gamma*: Replace back with version 34497, yielding much better results
[pachi.git] / probdist.c
blob2e15ecf315de1239b65cd0d6183adb231697cdfc
1 #include <assert.h>
2 #include <math.h>
3 #include <stdio.h>
4 #include <stdlib.h>
6 #include "move.h"
7 #include "probdist.h"
8 #include "random.h"
9 #include "board.h"
11 coord_t
12 probdist_pick(struct probdist *pd, coord_t *ignore)
14 double total = probdist_total(pd) - PROBDIST_EPSILON;
15 assert(total >= 0);
16 double stab = fast_frandom() * total;
17 //fprintf(stderr, "stab %f / %f\n", stab, total);
19 int r = 0;
20 while (stab > pd->rowtotals[r] + PROBDIST_EPSILON) {
21 stab -= pd->rowtotals[r];
22 r++;
23 assert(r < board_size(pd->b));
25 for (coord_t c = r * board_size(pd->b); c < board_size2(pd->b); c++) {
26 //fprintf(stderr, "[%s] %f (%f)\n", coord2sstr(c, &pd->b), pd->items[c], stab);
27 if (c == *ignore) {
28 ignore++;
29 continue;
31 if (stab <= pd->items[c])
32 return c;
33 stab -= pd->items[c];
36 fprintf(stderr, "overstab %f (total %f)\n", stab, total);
37 assert(0);
38 return -1;