Re: [PATCHES] Numeric version of factorial() - Mailing list pgsql-docs

From Bruce Momjian
Subject Re: [PATCHES] Numeric version of factorial()
Date
Msg-id 200312012154.hB1LsSn15127@candle.pha.pa.us
Whole thread Raw
Responses Re: [PATCHES] Numeric version of factorial()  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-docs
I had to remove the factorial example from the casting docs because
factorial is now defined only for numeric.  Would someone take the
attached example and make a new one with a different operator?

Thanks.

---------------------------------------------------------------------------

Gavin Sherry wrote:
> Attached is a patch implementing factorial(), returning numeric. Points to
> note:
>
> 1) arttype is numeric. I thought this was the best way of allowing
> arbitarily large factorials, even though factorial(2^63) is a large
> number. Happy to change to integers if this is overkill.
> 2) since we're accepting numeric arguments, the patch tests for floats. If
> a numeric is passed with non-zero decimal portion, an error is raised
> since (from memory) they are undefined.
> 3) I have not removed factorial([int2|int4|int8]), not their operator
> counterparts since I didn't know what people would want done with these.
> 4) I haven't added any documentation but am happy to once I know if people
> want int or numeric arguments.
>
> Thanks,
>
> Gavin

Content-Description:

[ Attachment, skipping... ]

>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo@postgresql.org so that your
>       message can get through to the mailing list cleanly

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/typeconv.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/typeconv.sgml,v
retrieving revision 1.39
diff -c -c -r1.39 typeconv.sgml
*** doc/src/sgml/typeconv.sgml    29 Nov 2003 19:51:38 -0000    1.39
--- doc/src/sgml/typeconv.sgml    1 Dec 2003 21:42:04 -0000
***************
*** 437,466 ****
  ERROR:  "-4.5e500" is out of range for type double precision
  </screen>
  </para>
-
- <para>
- On the other hand, the postfix operator <literal>!</> (factorial)
- is defined only for integer data types, not for <type>float8</type>.  So, if we
- try a similar case with <literal>!</>, we get:
- <screen>
- SELECT '20' ! AS "factorial";
-
- ERROR:  operator is not unique: "unknown" !
- HINT:  Could not choose a best candidate operator. You may need to add explicit
- type casts.
- </screen>
- This happens because the system can't decide which of the several
- possible <literal>!</> operators should be preferred.  We can help
- it out with an explicit cast:
- <screen>
- SELECT CAST('20' AS int8) ! AS "factorial";
-
-       factorial
- ---------------------
-  2432902008176640000
- (1 row)
- </screen>
- </para>
  </example>

  </sect1>
--- 437,442 ----

pgsql-docs by date:

Previous
From: Randolf Richardson
Date:
Subject: Re: 7.4 official docs : Fonts?
Next
From: Tom Lane
Date:
Subject: Re: [PATCHES] Numeric version of factorial()