""" equation_log.py
"""
#! /usr/bin/python3
# -*- coding: utf-8 -*-
# lettres accentuées interdites (sauf dans les commentaires et les chaînes de caractères)

# objet : résoudre pn = p0 a^n > b p0   pour l'inconnue n entière
# Application aux suites géométriques :
#   population initiale :       p0
#   population première année : p1 = a p0
#   population finale :         pn = p0 a^n
#
# Exemple : Soit une population qui croît au taux de 5% (suite géométrique de raison a=1,05) 
# Après combien d'années aura-t-elle été multipliée par 2 (b=2) ?
# Résultat attendu :
#   La population croît du facteur 2.0 en 14.206699082890461 années réelles
#   La population croît d'un facteur > 2.0 après 15 années entières 
#
# résoudre   pn > b p0
# soit : p0 a^n > b p0
# soit :    a^n > b
# la solution en n de a^n = b n'est pas entière :
# on appelle la solution réelle x : a^x = b

from math import log

def equation_log(a, b) :
    """
résoud l'équation a^x = b
ln(a^x) = ln(b)  (ok car ln() est monotone)
x ln(a) = ln(b)
x = ln(b) / ln(a)
"""
    print(f"equation_log() : résoud {a}^x = {b}")
    
    # contrôle des données
    # pour que log(a) soit défini :
    assert( a > 0 )
    # pour que x soit positif :
    assert( log(b) * log(a) > 0 )
    
    x = log(b) / log(a)
    print(f"  La population atteint {b} en {x:9.5f} années réelles")
    print(f"  {a}^{x:9.5f} = {a**(x):9.5f} ≈ {b} ")

    # solution entière
    if a > 1 :
        # la population croît
        n = int(x) + 1
        print("  La population dépasse", b, "après", n, "années entières")
        print(f"  {a}^{n-1} = {a**(n-1):9.5f} < {b} < {a}^{n} = {a**(n):9.5f}")
    else : # 0 < a < 1
        # la population décroît
        n = int(x)
        print("  La population passe au-dessous de", b, "après", n, "années entières")
        print(f"  {a}^{n-1} = {a**(n-1):9.5f} > {b} > {a}^{n} = {a**(n):9.5f}")
    print()
    return (x, n)

help(equation_log)

# données du problème :
a = 1.05     # coefficient multiplicateur annuel
b = 2.       # facteur multiplicateur pour x années
print("# données  : facteur de croissance annuel : a =", a)
print("# question : quand la population dépassera-t-elle b =", b, "?")
print()

x, n = equation_log(a, b)

# données du problème :
a = 0.9       # coefficient multiplicateur annuel
b = 1/10      # facteur multiplicateur pour x années
print("# données  : facteur de croissance annuel : a =", a)
print("# question : quand la population passera-t-elle au-dessous de b =", b, "?")
print()

x, n = equation_log(a, b)

print("fin")
"""
"""