# -*- coding: utf-8 -*-
"""
Created on Sun Jan 12 14:32:26 2014

@author: dconduche
"""

def DichoFonction(f,a,b,eps): 
    """Recherche la solution x_0 de f(x)=0 
    f : fonction continue monotone définie sur [a,b] 
    eps : float représentant la précision (la solution est trouvée à eps près) 
    a : float représentant le début de l'intervalle 
    b : float représentant la fin de l'intervalle (a<b et f(a)f(b)<0)
    """
    while abs(b-a) > 2*eps:
        m = (a+b) / 2
        if f(a)*f(m) <= 0:
            b = m   # x_0 est entre a et m
        else:
            a = m   # x_0 est entre  m et b
    return (a+b) / 2

# Type retourné : un float représentant x_0 à eps près.




# Remarque : si la fonction n'est pas monotone, on trouve *une* solution de f(x)=0, mais on ne sait pas laquelle.
    
# Test :
for i in [3,7,10]:
    print('résolution de x²=2 avec '+str(i)+ " chiffres: "+str(DichoFonction(lambda x : x**2-2,0.,2,10**(-i))))
print('calcul direct ave python : '+str(2.0**(.5)))
