From 9751e8bf6381569427131c25332aa9f10f178792 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 10 Mar 2008 12:39:23 +0000 Subject: [PATCH] Document and enforce that the usable range of setseed() arguments is -1 to 1, not 0 to 1. The actual behavior for values within this range does not change. Kris Jurka --- doc/src/sgml/func.sgml | 2 +- doc/src/sgml/ref/set.sgml | 2 +- src/backend/utils/adt/float.c | 6 +++++- src/backend/utils/misc/guc.c | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 2bead2bdfd..5e17d3471a 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -828,7 +828,7 @@ setseed(dp) void - set seed for subsequent random() calls (value between 0 and 1.0) + set seed for subsequent random() calls (value between -1.0 and 1.0) setseed(0.54823) diff --git a/doc/src/sgml/ref/set.sgml b/doc/src/sgml/ref/set.sgml index 574a658473..f4ec2df94b 100644 --- a/doc/src/sgml/ref/set.sgml +++ b/doc/src/sgml/ref/set.sgml @@ -166,7 +166,7 @@ SET [ SESSION | LOCAL ] TIME ZONE { timezone Sets the internal seed for the random number generator (the function random). Allowed values are - floating-point numbers between 0 and 1, which are then + floating-point numbers between -1 and 1, which are then multiplied by 231-1. diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 8d2fc68fbc..a01c976b69 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -1684,8 +1684,12 @@ Datum setseed(PG_FUNCTION_ARGS) { float8 seed = PG_GETARG_FLOAT8(0); - int iseed = (int) (seed * MAX_RANDOM_VALUE); + int iseed; + if (seed < -1 || seed > 1) + elog(ERROR, "setseed parameter %f out of range [-1,1]", seed); + + iseed = (int) (seed * MAX_RANDOM_VALUE); srandom((unsigned int) iseed); PG_RETURN_VOID(); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 1f2c6430bc..f872456f17 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1849,7 +1849,7 @@ static struct config_real ConfigureNamesReal[] = GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE }, &phony_random_seed, - 0.5, 0.0, 1.0, assign_random_seed, show_random_seed + 0.0, -1.0, 1.0, assign_random_seed, show_random_seed }, { -- 2.39.5