Thread: Make factorial(0::int2) return 1, as per spec.
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)
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
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
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