Sampling algorithms for D
Joseph Rushton Wakeling
joseph.wakeling at webdrake.net
Fri Apr 13 02:41:08 PDT 2012
On 13/04/12 01:44, bearophile wrote:
> final size_t select(ref UniformRNG urng)
> in {
> assert(_recordsRemaining> 0);
> assert(_sampleRemaining> 0);
> } body {
> ...
> }
OK. I'm confused by these asserts, because if I go beyond what is acceptable by
calling select() even after I've collected a complete sample, no error is
thrown. e.g. if I put in place a function:
void sampling_test_simple(SamplerType, UniformRNG)
(size_t records, size_t samples, ref UniformRNG urng)
{
auto s = new SamplerType(records,samples,urng);
while(s.sampleRemaining > 0) {
write("\trecord selected: ", s.select(urng), ".");
write("\trecords remaining: ", s.recordsRemaining, ".");
writeln("\tstill to sample: ", s.sampleRemaining, ".");
}
// Let's see if we can bust this ...
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
writeln("Selecting 1 more just for luck: ", s.select(urng), ", records
remaining: ", s.recordsRemaining, ", still to sample: ", s.sampleRemaining);
}
(... see current GitHub code: https://github.com/WebDrake/SampleD )
It doesn't make any difference if I compile with -debug enabled:
gdmd -debug -oftest sampled.d
More information about the Digitalmars-d-learn
mailing list