pg.ddx.io  pgsql-docs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
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 ----

view thread (9+ messages)  latest in thread

Message-ID: <200312012154.hB1LsSn15127@candle.pha.pa.us>
Permalink:  ../200312012154.hB1LsSn15127@candle.pha.pa.us/
Also on:    postgresql.org/message-id/200312012154.hB1LsSn15127@candle.pha.pa.us

 · 

reply

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