Sampling algorithms for D
Joseph Rushton Wakeling
joseph.wakeling at webdrake.net
Thu Apr 12 15:34:38 PDT 2012
On 12/04/12 21:54, bearophile wrote:
>> sampling_test_simple!(VitterA!Random,Random)(100,5,urng);
>
> Currently your code doesn't work if you want to use a Xorshift generator.
Ahhh, I see what you mean now -- the sampler classes are fine, but the way the
main() function is written means you can't just tweak the RNG.
The original code I tried writing was something like,
sampling_test_simple!(VitterA, Random)(100, 5, urng);
... with the sampler object being created in the function with,
auto s = new SamplerType!UniformRNG(records, samples, urng);
... but the compiler objected to that with the error,
sampled.d:216: Error: template instance
sampling_test_simple!(VitterA,XorshiftEngine!(uint,128,11,8,19))
does not match template declaration
sampling_test_simple(SamplerType,UniformRNG)
Here's the complete (wrong) function:
void sampling_test_simple(SamplerType, UniformRNG)
(size_t records, size_t samples, ref UniformRNG urng)
{
auto s = new SamplerType!UniformRNG(records,samples,urng);
while(s.sampleRemaining > 0) {
write("\trecord selected: ", s.select(urng), ".");
write("\trecords remaining: ", s.recordsRemaining, ".");
writeln("\tstill to sample: ", s.sampleRemaining, ".");
}
}
It's not clear to me why this fails or what I can do that would equate to this.
More information about the Digitalmars-d-learn
mailing list