""" equation_second_degre_freescience.py
"""
#! /usr/bin/python3
# -*- coding: utf-8 -*-
# lettres accentuées interdites (non ASCII 0-127 : poseront toujours des problèmes)
#                    acceptées dans les commentaires et les chaînes de caractères
# intérêt : test if / elif / else

doc = """
# but du programme : calculer les racines d'une équation du second degré.
#
# amélioration possible :
#  quand P << S² : b=-aS et Delta sont presque égaux,
#  il faut calculer la plus grande racine x1 (en valeur absolue)
#  puis en déduire la petite racine par : x1 x2 = c/a
"""
# pour la fonction sqrt(), il faut le package math
from math import sqrt
# on peut aussi utiliser "puissance 1/2" : **0.5
# sqrt(a) = a**0.5 = pow(a, 0.5)

# racines de : a x^2 + b x + c = 0
def ax2bxc(a, b, c) :
    print(f"### équation : {a} x^2 + ({b}) x + ({c}) = 0")
    delta = b*b - 4*a*c
    racines = None # liste des racines non définie
    if delta > 0 :
        # début du cas delta > 0
        # On a 2 racines
        x1 = (-b - sqrt(delta)) / (2*a)
        x2 = (-b + sqrt(delta)) / (2*a)
        racines = [ x1, x2 ]
    elif delta == 0 :
        # début du cas delta == 0
        # On a 1 racine double
        racines = [ -b/(2*a) ]
    else : # delta < 0
        # début du cas delta < 0
        # Il n'y a pas de racine réelle
        racines = [ ]
    return racines

# début du programme :
# 4 cas tests : x^2 - S x + P = 0 avec S=(x1+x2) et P=x1*x2
# (a = 1, b = -5, c = 6) : x1 = 2 et x2 = 3
# (1, -4, 4) : x = 2
# (1, 1, 1) : pas de racine réelle
# (1, -100.01, 1) : 2 racines 100 et 0.01
#                   résultat moins précis que 1.e-15

for (a, b, c) in [ (1, -5, 6), (1, -4, 4), (1, 1, 1), (1, -100.01, 1) ] :
    racines = ax2bxc(a, b, c)
    print("  racines :", racines )
    
    # vérification :
    for xi in racines :
        # 1e-15 à régler selon la précision désirée
        if abs(a * xi**2 + b * xi + c) > 1.e-15 :
            # on n'a jamais exactement 0, mais un petit nombre
            print("Erreur : xi=", xi, "ne vérifie pas l'équation")
            print("a xi^2 + b xi + c = ", a * xi**2 + b * xi + c, "!= 0")
    print()
print("# fin")
"""
"""