From: Bruce Momjian <pgman@candle.pha.pa.us>
To: Gavin Sherry <swm@linuxworld.com.au>
Cc: PostgreSQL-documentation <pgsql-docs@postgresql.org>
Subject: Re: [PATCHES] Numeric version of factorial()
Date: Mon, 1 Dec 2003 16:54:28 -0500 (EST)
Message-ID: <200312012154.hB1LsSn15127@candle.pha.pa.us> (raw)
In-Reply-To: <Pine.LNX.4.21.0308011020560.12997-200000@linuxworld.com.au>
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
Attachments:/pgpatches/factorial (text/plain, 1.2K) download
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 ----
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-docs@postgresql.org
Cc: pgman@candle.pha.pa.us, swm@linuxworld.com.au
Subject: Re: [PATCHES] Numeric version of factorial()
In-Reply-To: <200312012154.hB1LsSn15127@candle.pha.pa.us>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox