program nombre_dor
  implicit none
  double precision, parameter :: epsilon = 1.d-11
  double precision            :: u_prec, u_cour
  double precision            :: v_cour
  double precision            :: somme
  double precision            :: nombre_or

  ! Attention : une partie de l'expression suivante est
  ! ---------   évaluée en simple précision. Ce qui fait
  !             diverger le calcul itératif qui suit!
  !nombre_or = (1.d0 + 5.**0.5)/2.d0

  nombre_or = (1.d0 + 5.d0**0.5d0)/2.d0

  u_prec = 1.d0; u_cour = 1.d0
  do
    somme  = u_cour + u_prec
    u_prec = u_cour
    u_cour = somme
    v_cour = u_cour/u_prec
    if ( abs( v_cour-nombre_or ) < epsilon ) exit
  end do

  print*, "Limite de la suite (vn) : ", v_cour, &
          "Nombre d'or : ", nombre_or
end program nombre_dor

