private static double A = Math.Pow(5, 0.5);
private static double B = (A + 1) / 2;
private static double LNb = Math.Log(B);
public static int getIndex(decimal number){
return (int) Math.Round(Math.Log((double)((decimal) Fibonacci.A * number)) / Fibonacci.LNb);
public static decimal getNumber(int n){
return (decimal) Math.Round( Math.Pow(Fibonacci.B, n) / Fibonacci.A );
public static Tuple<int, decimal> find(decimal number){
int i = Fibonacci.getIndex(number);
return new Tuple<int, decimal>(i, Fibonacci.getNumber(i));
public static void Main()
var result = Fibonacci.find(100000);
Console.WriteLine(result.Item1);
Console.WriteLine(result.Item2);