public static IInteger fibonacci(final IInteger iArg) { BigInteger a = BigInteger.ONE; BigInteger b = BigInteger.ZERO; BigInteger c = BigInteger.ONE; BigInteger d = BigInteger.ZERO; BigInteger f = BigInteger.ZERO; final BigInteger c2 = BigInteger.valueOf(2); BigInteger temp = iArg.getBigNumerator(); while (!NumberUtil.isZero(temp)) { if (NumberUtil.isOdd(temp)) { d = f.multiply(c); f = a.multiply(c).add(f.multiply(b).add(d)); a = a.multiply(b).add(d); } d = c.multiply(c); c = b.multiply(c).multiply(c2).add(d); b = b.multiply(b).add(d); temp = temp.shiftRight(1); } final IInteger i = F.integer(f); return i; }
IInteger[] divRem = f.divideAndRemainder(); IFraction rest = F.fraction(divRem[1], f.denominator()); if (!NumberUtil.isZero(divRem[0])) {