[GSoC] Mir.random.flex - Generic non-uniform random sampling
Seb via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Tue Aug 23 03:34:16 PDT 2016
On Monday, 22 August 2016 at 17:13:10 UTC, jmh530 wrote:
> On Monday, 22 August 2016 at 15:34:47 UTC, Seb wrote:
>> Hey all,
>>
>> I am proud to publish a report of my GSoC work as two
>> extensive blog posts, which explain non-uniform random
>> sampling and the mir.random.flex package (part of Mir >
>> 0.16-beta2):
>>
>> http://blog.mir.dlang.io/random/2016/08/19/intro-to-random-sampling.html
>> http://blog.mir.dlang.io/random/2016/08/22/transformed-density-rejection-sampling.html
>>
>>
>
> Thanks for the well-done blog posts, especially the first one.
I am glad to hear this!
> Does your implementation make any use of CTFE?
If you refer to whether the intervals can be calculated at CT,
unfortunately it can't be used due to four main reasons:
- FP-math at CT (it's already hard to deal with at RT, see e.g.
my recent complaint [1]) - the problem is that the Flex algorithm
is very sensitive to numerical errors and thus an erroneous
change at the lowest end (e.g 10^-15) can lead to totally
different numbers with a seeded random engine
- std.container due to pointers (I doubt this can/will be fixed
in the near future)
- std.math due to inline assembly and other tricks (this can be
fixed and I will submit a couple of PRs soon)
- speed of the CTFE engine (see e.g. [2] for std.regex)
That being said CTFE is of course used to compute mixins,
constants and specialize functions. Moreover thanks to all
speed-ups described in the second blog, constructing the
intervals takes about 0.1ms, so for the majority of the users it
shouldn't even be noticeable and for the tiny minority it does,
they can still manually inline the intervals.
[1]
http://forum.dlang.org/post/hjaiavlfkoamenidomsa@forum.dlang.org
[2]
http://forum.dlang.org/post/iqcrnokalollrejcabad@forum.dlang.org
More information about the Digitalmars-d-announce
mailing list