#Déterminer par balayage un encadrement de racine de 2 à 10**(-n) près

# balayage brut pas à pas

def racine2(précision): #le paramètre est un entier
    pas=10**(-précision) #initialisation du pas de balayage
    valeur = 1 #valeur de départ
    while valeur**2<2:
        valeur = valeur + pas # déplacement pas à pas
    return valeur-pas,valeur

# balayage avec mise à jour du pas

def racine2bis(précision): #le paramètre est un entier
    valeur = 1 #valeur de départ
    pas = 1 #pas de départ
    while pas>10**(-précision-1): # condition de précision
        if (valeur+pas)**2<2:
            valeur = valeur +pas # avancement de la zone de recherche
        else:
            pas=pas/10 # réduction du pas de recherche
    return valeur,valeur+10*pas
    #On peut voir un gain de temps réel avec une précision de 8 chiffres


#utilisation du module fractions pour contourner l'erreur d'encodage des nombres décimaux
from fractions import Fraction

def racine2f(précision): #le paramètre est un entier
    pas=Fraction(1,10**précision) #initialisation du pas de balayage
    valeur = Fraction(1,1) #valeur de départ
    while valeur**2<2:
        valeur = valeur + pas # déplacement pas à pas
    return float(valeur-pas),float(valeur)


def racine2fbis(précision): #le paramètre est un entier
    valeur = Fraction(1,10**précision) #valeur de départ
    pas = Fraction(1,1) #pas de départ
    while pas>10**(-précision-1): # condition de précision
        if (valeur+pas)**2<2:
            valeur = valeur +pas # avancement de la zone de recherche
        else:
            pas=pas/10 # réduction du pas de recherche
    return float(valeur),float(valeur+10*pas)


#programme de recherche de la racine d'un entier choisi avec la précision désirée

def racine(entier,précision):#les paramètres sont des entiers
    valeur = 1 #valeur de départ
    pas = 1 #pas de départ
    while pas>10**(-précision-1): # condition de précision
        if (valeur+pas)**2<entier:
            valeur = valeur +pas # avancement de la zone de recherche
        else:
            pas=pas/10 # réduction du pas de recherche
    return valeur,valeur+10*pas






