package builtin.math;
import builtin.BuiltinSub;
import gui.Heap;
import gui.MintException;
import gui.Pointer;
import gui.PointerTools;
import gui.SmartList;
/**
*
* @author Oliver Chu
*/
public class Fib extends BuiltinSub {
private static final double PHI = 0.5 + Math.sqrt(1.25);
private static final double root5 = Math.sqrt(5.0);
@Override
public Pointer apply(SmartList<Pointer> args) throws MintException {
Pointer arg0 = args.get(0);
double n = (double) PointerTools.dereferenceInt(arg0);
double answer = Math.pow(PHI, n) / root5;
return Heap.allocateInt((int) (answer + 0.5));
}
}