summaryrefslogtreecommitdiff
path: root/mpz/fib2_ui.c
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2014-07-28 22:06:07 +0200
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2014-07-28 22:06:07 +0200
commita49165944f9f9a02ff33bdeed44a7e3b94c88116 (patch)
tree3610b833d40580e4bba03e448ff920ca640a030d /mpz/fib2_ui.c
parentef0493478fb83195f146745f13e64b3335e3517e (diff)
downloadgmp-a49165944f9f9a02ff33bdeed44a7e3b94c88116.tar.gz
mpz/fib2_ui.c: Use tabulated values, when available.
Diffstat (limited to 'mpz/fib2_ui.c')
-rw-r--r--mpz/fib2_ui.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/mpz/fib2_ui.c b/mpz/fib2_ui.c
index 122db8dd5..ddf456f58 100644
--- a/mpz/fib2_ui.c
+++ b/mpz/fib2_ui.c
@@ -1,6 +1,6 @@
/* mpz_fib2_ui -- calculate Fibonacci numbers.
-Copyright 2001, 2012 Free Software Foundation, Inc.
+Copyright 2001, 2012, 2014 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@@ -39,12 +39,21 @@ mpz_fib2_ui (mpz_ptr fn, mpz_ptr fnsub1, unsigned long n)
mp_ptr fp, f1p;
mp_size_t size;
+ if (n <= FIB_TABLE_LIMIT)
+ {
+ PTR(fn)[0] = FIB_TABLE (n);
+ SIZ(fn) = (n != 0); /* F[0]==0, others are !=0 */
+ PTR(fnsub1)[0] = FIB_TABLE ((int) n - 1);
+ SIZ(fnsub1) = (n != 1); /* F[1-1]==0, others are !=0 */
+ return;
+ }
+
size = MPN_FIB2_SIZE (n);
- fp = MPZ_REALLOC (fn, size);
- f1p = MPZ_REALLOC (fnsub1, size);
+ fp = MPZ_NEWALLOC (fn, size);
+ f1p = MPZ_NEWALLOC (fnsub1, size);
size = mpn_fib2_ui (fp, f1p, n);
- SIZ(fn) = size - (n == 0);
+ SIZ(fn) = size;
SIZ(fnsub1) = size - (f1p[size-1] == 0);
}