Make factorial(0::int2) return 1, as per spec.

Started by Kenji Sugitaabout 24 years ago4 messagespatches
Jump to latest
#1Kenji Sugita
sugita@sra.co.jp

Attached is a patch to make factorial(0::int2) return 1.

Attachments:

int2-factrial.patchtext/plain; charset=us-asciiDownload+3-1
#2Florian Weimer
Weimer@CERT.Uni-Stuttgart.DE
In reply to: Kenji Sugita (#1)
Re: Make factorial(0::int2) return 1, as per spec.

sugita@sra.co.jp writes:

-	if (arg1 < 1)
+	if (arg1 == 0)
+		result = 1;
+	else if (arg1 < 1)
result = 0;
else
for (result = 1; arg1 > 0; --arg1)

The second "if" should compare with 0, not 1. (It doesn't make a
difference, it's only about readability.)

--
Florian Weimer Weimer@CERT.Uni-Stuttgart.DE
University of Stuttgart http://CERT.Uni-Stuttgart.DE/people/fw/
RUS-CERT +49-711-685-5973/fax +49-711-685-5898

#3Bruce Momjian
bruce@momjian.us
In reply to: Kenji Sugita (#1)
Re: Make factorial(0::int2) return 1, as per spec.

Thanks. Patch applied. Seems I fixed the int4 case but missed int2.

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

sugita@sra.co.jp wrote:

Attached is a patch to make factorial(0::int2) return 1.

Index: backend/utils/adt/int.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/int.c,v
retrieving revision 1.48
diff -u -3 -p -r1.48 int.c
--- backend/utils/adt/int.c	2002/02/23 01:01:30	1.48
+++ backend/utils/adt/int.c	2002/05/29 15:56:11
@@ -800,7 +800,9 @@ int2fac(PG_FUNCTION_ARGS)
int16		arg1 = PG_GETARG_INT16(0);
int32		result;
-	if (arg1 < 1)
+	if (arg1 == 0)
+		result = 1;
+	else if (arg1 < 1)
result = 0;
else
for (result = 1; arg1 > 0; --arg1)

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#4Bruce Momjian
bruce@momjian.us
In reply to: Florian Weimer (#2)
Re: Make factorial(0::int2) return 1, as per spec.

Change made for int2 and int4.

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

Florian Weimer wrote:

sugita@sra.co.jp writes:

-	if (arg1 < 1)
+	if (arg1 == 0)
+		result = 1;
+	else if (arg1 < 1)
result = 0;
else
for (result = 1; arg1 > 0; --arg1)

The second "if" should compare with 0, not 1. (It doesn't make a
difference, it's only about readability.)

--
Florian Weimer Weimer@CERT.Uni-Stuttgart.DE
University of Stuttgart http://CERT.Uni-Stuttgart.DE/people/fw/
RUS-CERT +49-711-685-5973/fax +49-711-685-5898

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026