2022年6月16日(木) 22:37 Tim Düsterhus <t...@bastelstu.be>:

> Hi
>
> On 6/16/22 14:52, Tim Düsterhus wrote:
> > (3) Naming of PCG64:
> >
> > I must admit that the fact that PCG is a full family of similar, but not
> > identical generators is one thing that made me (and still makes me)
> > prefer the xoshiro family which has clearer names for its variants.
> >
> > It was also pretty hard to find the PCG definitions on the PCG website,
> > but I believe that it refers to this:
> >
> > https://www.pcg-random.org/using-pcg-c.html#low-level-api?
> >
> > In that case PCG64S would be consistent with the upstream high level API
> > name. I am not sure if Pcg64s would be more readable, though.
> >
> > It would definitely need a good explanation in the documentation which
> > exact variant it is, though.
>
> I've now had a look at the Paper [1], because I wanted to find out what
> the various bits and pieces within the full oneseq-128-xsl-rr-64 name
> mean and in the paper I came across section "6.3 Specific
> Implementations" which notes:
>
> > The library provides named generators based on
> > their properties, not their underlying implementations (e.g.,
> pcg32_unique for a
> > general-purpose 32-bit generator with a unique stream). That way, when
> future family
> > members that perform even better are discovered and added (hopefully due
> to the
> > discoveries of others), users can switch seamlessly over to them.
>
> This implies that the official Pcg64s name might refer to a different
> implementation in the future. This makes it hard for PHP to keep the
> compatibility guarantee that a specific engine will always refer to a
> specific well-defined RNG. This implies that the engine needs to be
> named "PcgOneseq128XslRr64" to accurately describe the implementation.
> This - of course - is absolutely unwieldy. Note sure what the best
> course of action is here.
>
> [1] https://www.pcg-random.org/pdf/hmc-cs-2014-0905.pdf
>
> Best regards
> Tim Düsterhus
>

Hello Tim

Thank you for your continued support.

(1) Thanks!

(2) You are indeed correct. I renamed it to pickArrayKey().

(3) This is a very tricky problem. As you point out, it took me a while to
figure out PCG64 too.
However, after statistical testing PCG64 (pcg_oneseq-128-xsl-rr-64) seems
to do a good job.
(Though Xoshiro256** does as well, and has a more obvious name.)

Regarding the naming issue, I have looked at implementations in other
languages
(Python's NumPy and Rust) and none of them seem to be very clear.

I agree with you about keeping the names clear. Although it is complicated,
I don't think anyone would be particularly bothered by the name
PcgOneseq128XslRr64.
However, some people may continue to use MT because they don't understand
it well.

I think the possible options are as follows

A. Rename PCG64 to PcgOneseq128XslRr64
B. Rename PCG64 to PcgOneseq128XslRr64 and then re-implement the more
obvious Xoshiro256StarStar
C. Remove PCG64 and re-implement Xoshiro256StarStart

Personally, I think B is the best.

What do you think?

Regards
Go Kudo

Reply via email to