On 18/12/2014 18:51, John Maddock wrote:
Neither for 1.56.0 nor 1.57.0 does the change-log list an update to the random numbers library, so first I am puzzled why the libraries behave differently (though [Math] has undergone some changes -> propagation to [Random]?). Second, it is not clear to me why for the first bunch of uniformly distributed variates the results are identical, while for the second, after normally distributed variates were generated, the are not. It appears that the generation of normally distributed variates changes the whole state of the random numbers engine in a different manner [e.g multiple engine calls ??]. Any insight into what is going on here is much appreciated. And foremost: Is any of 1.55 or 1.57 bugged, that is one should be clearly preferred over the other?
I've observed this, too! The change seems to have been introduced in Boost version 1.56.
Looks like the normal distribution was completely rewritten between those two releases: https://github.com/boostorg/random/commit/f0ec97ba36c05ef00f2d29dcf66094e3f4...
Beyond that I know nothing, John.
Ok it appears that the algorithm generating the variates was completely changed (from Box-Muller to Ziggurat sampling), where the latter makes a variable number of engine calls. Thus not only differ the genertaed normally distributed variates themselves, but also the state of the engine afterwards. A quick search yielded that the Ziggurat is faster, but can someone also comment specifically on the robustness of the provided implementation? What has been the prime motivation of the change? Is it intended that such changes which are transparent to end-users do not become reflected in the change-logs? In my case I have the troubles that now firstly all my existent test cases are invalidated (the lesser issue) and that in general reproducibility among runs is not provided any more if I upgrade to 1.57 (the greater issue). thanks, Thomas