import numpy as np

# Valeurs mesurées (à compléter en mL)
Veq_colo =
Veq2_pH  =

# TOLÉRANCES (demi-largeur de l'intervalle)
tol_V_fiole  = 0.15   # ±0,15 mL
tol_V_pipette = 0.02  # ±0,02 mL
tol_m_masse= 0.01     # ±0,01 g

m = 0.5                 # masse de percarbonate de sodium en g
c_acide = 2e-2          # concentration de l'acide chlorhydrique en mol/L
u_c_acide = 7e-4        # incertitude-type -> normale

c_perm = 5e-3           # concentration du permnganate de potassium en mol/L
u_c_perm = 1.3e-4       # incertitude-type -> normale

V_fiole = 250           # volume de la fiole en mL
V_pipette = 10          # volume de la pipette en mL

u_Veq2_pH  = 0.05   # incertitude-type 0,05mL -> normale
u_Veq_colo = 0.06   # incertitude-type 0,06mL-> normale


N = 100000              # nombre de simulations Monte Carlo

# Lois UNIFORMES pour les grandeurs à tolérance

V_fiole_values = np.random.uniform(V_fiole - tol_V_fiole,
                                   V_fiole + tol_V_fiole, N)
V_pipette_values = np.random.uniform(V_pipette - tol_V_pipette,
                                     V_pipette + tol_V_pipette, N)
m_values = np.random.uniform(m - tol_m_masse,m + tol_m_masse, N)

# Lois NORMALES pour les grandeurs avec incertitude-type

c_acide_values  = np.random.normal(c_acide,  u_c_acide,  N)
c_perm_values   = np.random.normal(c_perm,   u_c_perm,   N)
Veq2_pH_values  = np.random.normal(Veq2_pH, u_Veq2_pH,  N)
Veq_colo_values = np.random.normal(Veq_colo, u_Veq_colo ,N)

a_values=(c_acide_values*Veq2_pH_values/(2*V_pipette_values))*V_fiole_values*1e-3*314/m_values
b_values=(5*c_perm_values*Veq_colo_values/(2*V_pipette_values))*V_fiole_values*1e-3*314/m_values

u_a = np.std(a_values)
u_b = np.std(b_values)

# Affichage du résultat
print(f"avec l'incertitude-type u(a)= {u_a:.3f} ")
print(f"avec l'incertitude-type u(b)= {u_b:.3f} ")