フィボナッチ数 一般項

 先のコードとは異なる実装を考えてはみたものの、これというものではなかったので、一般項を添えるにとどまりました。

using System;
using System.Collections.Generic;

class Program {
	static void Main(string[] args) {
		int index = 1;
		foreach (ulong value in Fibonacci.Numbers) {
			Console.WriteLine("({0:X016}) {0} {1}", value, Fibonacci.Binet(index));
			if (++index >= 90)
				break;
		}
	}
}

public static class Fibonacci {
	static readonly double SquareRootOfFive = Math.Sqrt(5);
	static readonly double InverseSqaureRootOfFive = 1 / SquareRootOfFive;
	public static readonly double GoldenRatio = (1 + SquareRootOfFive) * 0.5;
	public static double Binet(double n) {
		return (Math.Pow(GoldenRatio, n) - Math.Pow(1 - GoldenRatio, n)) * InverseSqaureRootOfFive;
	}
	public static IEnumerable<ulong> Numbers {
		get {
			ulong a = 1UL, b = 1UL;
			yield return a;
			yield return b;
			for (; ; ) {
				a += b;
				yield return a;
				b += a;
				yield return b;
			}
		}
	}
}