/* fib-float.c -- Fibonacci-Zahlen, iterativ (konstanter Platz), float */

#include <stdio.h>

float fibonacci (unsigned int n)
{
  if (n == 0) return 0;
  else if (n == 1) return 1;
  else {
    float a = 0;
    float b = 1;
    unsigned int i = 2;
    while (i <= n) {
      /* Invariante: a == F(i-2) und b == F(i-1) */
      float sum = a + b;
      a = b;
      b = sum;
      i = i + 1;
      /* Wieder korrekt */
    }
    /* Hier ist i == n + 1, also b == F(n) */
    return b;
  }
}

int main ()
{
  unsigned int n = 0;

  while (n <= 200) {
    float fib_n = fibonacci(n);
    printf("F(%u) = %f (%e)\n", n, (double) fib_n, (double) fib_n);
    n = n + 1;
  }
  
  return 0;
}
