# -*- coding: utf-8 -*-

import random #Permet l'utilisation de la fonction uniform
from scipy import stats
import numpy as np

# La fonction uniform(a,b) permet de générer un nombre aléatoire entre a et b
def alea(v,deltav):
    return(random.uniform(v-deltav/2,v+deltav/2))


MC = 176.1 # en g/mol
MT = 158.11


#Liste des valeurs dans la formule littérale et de leur erreur:    
Ci = 5E-3
DeltaCi = 5E-5 #Estimation avec des cs
Vp = 5E-3
DeltaVp = 0.05E-3 #a la pipette
Vi = 5E-3
DeltaVi = 0.05E-3 #a la pipette
Vf = 50E-3
DeltaVf = 0.05E-3 #a fiole jaugée
mthio = 0.3
Deltamthio = 0.01 #balance à 10-2 g
VE = 14.5E-3
DeltaVE = 0.05E-3 #1/2 graduation de burette
Vthio = 100E-3
DeltaVthio = 0.1E-3
#Soyons gentils, on ne considère pas M_C


#Génération d'une liste de 1000 valeurs de la masse de vitamine C à partir de valeurs générées aléatoirement
Liste_m = []
for i in range(0,1000):
    Ci_Alea = alea(Ci,DeltaCi)
    Vi_Alea = alea(Vi,DeltaVi)
    Vp_Alea = alea(Vp,DeltaVp)
    Vf_Alea = alea(Vf,DeltaVf)
    VE_Alea = alea(VE,DeltaVE)
    Vthio_Alea = alea(Vthio,DeltaVthio)
    mthio_Alea = alea(mthio,Deltamthio)
    Liste_m.append(Ci_Alea*Vp_Alea*MC - mthio_Alea*VE_Alea*Vi_Alea*MC/(2*MT*Vthio_Alea*Vf_Alea))
    
    #)

#Etude statistique de la liste de valeur obtenue et détermination de l'incertitude type 
Moyenne = np.mean(Liste_m)
sigma = np.std(Liste_m) #Ecart type

print("La moyenne est " + str(Moyenne)+" g")
print("L'incertitude élargie est " + str(sigma)+" g")
