diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2014-07-28 22:06:07 +0200 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2014-07-28 22:06:07 +0200 |
commit | a49165944f9f9a02ff33bdeed44a7e3b94c88116 (patch) | |
tree | 3610b833d40580e4bba03e448ff920ca640a030d /mpz/fib2_ui.c | |
parent | ef0493478fb83195f146745f13e64b3335e3517e (diff) | |
download | gmp-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.c | 17 |
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); } |