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
Index: doc/src/sgml/func.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/func.sgml,v
retrieving revision 1.423
diff -c -r1.423 func.sgml
*** doc/src/sgml/func.sgml      6 Mar 2008 18:49:32 -0000       1.423
--- doc/src/sgml/func.sgml      10 Mar 2008 06:11:55 -0000
***************
*** 828,834 ****
        <row>
         
<entry><literal><function>setseed</function>(<type>dp</type>)</literal></entry>
         <entry><type>void</type></entry>
!        <entry>set seed for subsequent <literal>random()</literal> calls 
(value between 0 and 1.0)</entry>
         <entry><literal>setseed(0.54823)</literal></entry>
         <entry></entry>
        </row>
--- 828,834 ----
        <row>
         
<entry><literal><function>setseed</function>(<type>dp</type>)</literal></entry>
         <entry><type>void</type></entry>
!        <entry>set seed for subsequent <literal>random()</literal> calls 
(value between -1.0 and 1.0)</entry>
         <entry><literal>setseed(0.54823)</literal></entry>
         <entry></entry>
        </row>
Index: src/backend/utils/adt/float.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/float.c,v
retrieving revision 1.153
diff -c -r1.153 float.c
*** src/backend/utils/adt/float.c       1 Jan 2008 19:45:52 -0000       1.153
--- src/backend/utils/adt/float.c       10 Mar 2008 06:11:55 -0000
***************
*** 1684,1691 ****
  setseed(PG_FUNCTION_ARGS)
  {
        float8          seed = PG_GETARG_FLOAT8(0);
!       int                     iseed = (int) (seed * MAX_RANDOM_VALUE);
  
        srandom((unsigned int) iseed);
  
        PG_RETURN_VOID();
--- 1684,1695 ----
  setseed(PG_FUNCTION_ARGS)
  {
        float8          seed = PG_GETARG_FLOAT8(0);
!       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();
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.435
diff -c -r1.435 guc.c
*** src/backend/utils/misc/guc.c        10 Mar 2008 03:22:29 -0000      1.435
--- src/backend/utils/misc/guc.c        10 Mar 2008 06:11:55 -0000
***************
*** 1849,1855 ****
                        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
        },
  
        {
--- 1849,1855 ----
                        GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE 
| GUC_DISALLOW_IN_FILE
                },
                &phony_random_seed,
!               0.5, -1.0, 1.0, assign_random_seed, show_random_seed
        },
  
        {
-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to