12 probdist_pick(struct probdist
*pd
, coord_t
*ignore
)
14 double total
= probdist_total(pd
) - PROBDIST_EPSILON
;
16 double stab
= fast_frandom() * total
;
17 //fprintf(stderr, "stab %f / %f\n", stab, total);
20 while (stab
> pd
->rowtotals
[r
] + PROBDIST_EPSILON
) {
21 stab
-= pd
->rowtotals
[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);
31 if (stab
<= pd
->items
[c
])
36 fprintf(stderr
, "overstab %f (total %f)\n", stab
, total
);