setseed accepts bad seeds
Why doesn't setseed complain when given a seed value outside of its
expected range? The documentation claims that 0 -> 1 should be used,
but shouldn't it actually be -1 -> 1 to get the full range of the seed?
If passed a value outside this range you always get the same value which
isn't going to produce a good random number stream.
Kris Jurka
Kris Jurka <books@ejurka.com> writes:
Why doesn't setseed complain when given a seed value outside of its
expected range?
Why should it complain? The use of the value is totally unspecified
anyway.
regards, tom lane
On Wed, 11 Apr 2007, Tom Lane wrote:
Kris Jurka <books@ejurka.com> writes:
Why doesn't setseed complain when given a seed value outside of its
expected range?Why should it complain? The use of the value is totally unspecified
anyway.
Because the user is likely using it incorrectly. I'm not sure what you
mean by totally unspecified. The documentation[1]http://www.postgresql.org/docs/8.2/static/functions-math.html#FUNCTIONS-MATH-FUNC-TABLE states:
set seed for subsequent random() calls (value between 0 and 1.0)
When a user calls setseed(5), setseed(500), or setseed(-500) they get the
same seed value each time which is surely not what they intended. At
minimum I think it should raise a warning.
Also I think that documentation should be corrected to indicate that
vaules -1 to 1 are the correct seed value range or it should it should map
0->1 to the entire seed space, not just half of it as is currently done.
The decision of which change to make is unclear because it's a change to
either the call signature or to the generated values for a given user
supplied seed.
Kris Jurka
[1]: http://www.postgresql.org/docs/8.2/static/functions-math.html#FUNCTIONS-MATH-FUNC-TABLE
Kris Jurka <books@ejurka.com> writes:
On Wed, 11 Apr 2007, Tom Lane wrote:
Kris Jurka <books@ejurka.com> writes:
Why doesn't setseed complain when given a seed value outside of its
expected range?Why should it complain? The use of the value is totally unspecified
anyway.
Because the user is likely using it incorrectly.
It's not really possible to use it "incorrectly", AFAICS. Any value you
might pass to it will result in a specific new seed value. Nowhere is
there any guarantee of what the mapping is, and it's obviously
impossible to guarantee that the mapping is one-to-one, so any user
assumptions about what a specific seed value might "mean" seem broken
regardless.
regards, tom lane
On Wed, 11 Apr 2007, Tom Lane wrote:
It's not really possible to use it "incorrectly", AFAICS. Any value you
might pass to it will result in a specific new seed value. Nowhere is
there any guarantee of what the mapping is, and it's obviously
impossible to guarantee that the mapping is one-to-one, so any user
assumptions about what a specific seed value might "mean" seem broken
regardless.
Then please consider this patch which checks the range and maps the
provided value to the entire seed space.
Kris Jurka
Attachments:
setseed.patchtext/plain; charset=US-ASCII; name=setseed.patchDownload+12-11
This has been saved for the 8.4 release:
http://momjian.postgresql.org/cgi-bin/pgpatches_hold
---------------------------------------------------------------------------
Kris Jurka wrote:
On Wed, 11 Apr 2007, Tom Lane wrote:
It's not really possible to use it "incorrectly", AFAICS. Any value you
might pass to it will result in a specific new seed value. Nowhere is
there any guarantee of what the mapping is, and it's obviously
impossible to guarantee that the mapping is one-to-one, so any user
assumptions about what a specific seed value might "mean" seem broken
regardless.Then please consider this patch which checks the range and maps the
provided value to the entire seed space.Kris Jurka
Content-Description:
[ Attachment, skipping... ]
---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at
--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com
+ If your life is a hard drive, Christ can be your backup. +
Kris Jurka <books@ejurka.com> writes:
On Wed, 11 Apr 2007, Tom Lane wrote:
It's not really possible to use it "incorrectly", AFAICS. Any value you
might pass to it will result in a specific new seed value. Nowhere is
there any guarantee of what the mapping is, and it's obviously
impossible to guarantee that the mapping is one-to-one, so any user
assumptions about what a specific seed value might "mean" seem broken
regardless.
Then please consider this patch which checks the range and maps the
provided value to the entire seed space.
I'm still not very happy about this. It'll change the behavior of
existing applications, in the service of no goal that I consider
convincing.
I'd be inclined to leave the mapping alone and just insert a warning
(or hard error) for inputs outside the range -1 to 1.
regards, tom lane
On Mon, 10 Mar 2008, Tom Lane wrote:
I'd be inclined to leave the mapping alone and just insert a warning
(or hard error) for inputs outside the range -1 to 1.
Here's a patch that errors out for out of range values.
Kris Jurka
Attachments:
setseed-range-check.patchtext/plain; charset=US-ASCII; name=setseed-range-check.patchDownload+10-6
Kris Jurka <books@ejurka.com> writes:
On Mon, 10 Mar 2008, Tom Lane wrote:
I'd be inclined to leave the mapping alone and just insert a warning
(or hard error) for inputs outside the range -1 to 1.
Here's a patch that errors out for out of range values.
Applied, thanks.
regards, tom lane