2
0
Fork 0

modif Perl/test.pl : retablissement de la coherence entre la doc et la verification relative (comme explique dans la doc, la precision relative n est pas en pourcent : |(X - Xref) / Xref| <= precision); le script test.pl est donc maintenant coherent avec la doc doc_procedure_verification.pdf section 5.2.2 et egalement section 6.5 concernant les fichiers .precision

This commit is contained in:
troufflard 2018-03-15 13:14:01 +00:00
parent 8129631bd6
commit 641526eefa

View file

@ -43,9 +43,8 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
#remarque : a mettre entre guillements (pour des raisons d affichage dans le rapport de test)
my $PREC_ABSOLU = "1.e-6";#precision pour la comparaison absolue
my $PREC_RELATIVE_POURCENT = "1.e-1";#precision pour la comparaison relative (en pourcent)
#2015-11-25 : changement precision relative de 1e-3 en 1e-1 (0.001% c etait un peu trop severe)
my $PREC_ABSOLU_DEFAUT = "1.e-6";#precision par defaut pour la comparaison absolue : |X - Xref| <= precision
my $PREC_RELATIVE_DEFAUT = "1.e-3";#precision par defaut pour la comparaison relative : |(X - Xref) / Xref| <= precision
@ -907,8 +906,8 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
##############################################################
#---initialisation avec les precisions par defaut
for(my $i=0; $i<=$#donnees_temp_maple; $i++) {
$precisions_abolues[$i] = $PREC_ABSOLU;
$precisions_relatives[$i] = $PREC_RELATIVE_POURCENT;
$precisions_abolues[$i] = $PREC_ABSOLU_DEFAUT;
$precisions_relatives[$i] = $PREC_RELATIVE_DEFAUT;
}
#---modification eventuelle des precisions si un fichier .precision existe
if(-e $fic_precision) {
@ -948,8 +947,7 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
#precisions
my $precision_absolue = $precisions_abolues[$i_valeur];#*abs($valeur_ref);
# GR : modif 13 mars 2018: * 100 car les verifs sont faites ensuite sur les %
my $precision_relative = 100. * $precisions_relatives[$i_valeur];
my $precision_relative = $precisions_relatives[$i_valeur];
#nombre de decimales des precisions (a titre cosmetique uniquement car c est pour afficher des valeurs arrondies dans le rapport de test)
my $nb_decimales_prec_absolue = return_nb_decimales_first($precision_absolue);
@ -958,19 +956,19 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
#difference absolue arrondie au nombre de decimales de la precision $precision_absolue
my $diff_absolue = sprintf("%.${nb_decimales_prec_absolue}f", $valeur_temp - $valeur_ref);
#difference relative en pourcent arrondie au nombre de decimale de la precision $precision_relative
my $diff_relative_pourcent;
#difference relative arrondie au nombre de decimale de la precision $precision_relative
my $diff_relative;
#-si $valeur_temp et $valeur_ref sont nulles, pas de souci, la difference relative est forcement nulle
if($valeur_ref == 0 and $valeur_temp == 0) {
$diff_relative_pourcent = sprintf("%.${nb_decimales_prec_relative}f", 0.);
$diff_relative = sprintf("%.${nb_decimales_prec_relative}f", 0.);
}
#si $valeur_ref est nulle mais pas $valeur_temp, la comparaison relative est impossible
elsif($valeur_ref == 0) {
$diff_relative_pourcent = "impossible car valeur de reference egale a 0";
$diff_relative = "impossible car valeur de reference egale a 0";
}
#cas general : difference relative par rapport a $valeur_ref
else {
$diff_relative_pourcent = sprintf("%.${nb_decimales_prec_relative}f", 100.*($valeur_temp-$valeur_ref)/$valeur_ref);
$diff_relative = sprintf("%.${nb_decimales_prec_relative}f", ($valeur_temp-$valeur_ref)/$valeur_ref);
}
$sortie_rapport .= " -> grandeur testee : colonne \[$no_colonne_maple\]\n";
@ -995,20 +993,20 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
#comparaison relative
#############################
#---cas d une comparaison impossible => affichage d un message d erreur (mais pas du mot ECHEC : ce n est pas un echec car la valeur de reference est egale a 0)
if($diff_relative_pourcent =~ /impossible/) {
if($diff_relative =~ /impossible/) {
$sortie_rapport .= " - comparaison relative : impossible car valeur de reference egale a 0\n";
}
#---OK
elsif(abs($diff_relative_pourcent) <= $precision_relative) {
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> OK\n";
elsif(abs($diff_relative) <= $precision_relative) {
$sortie_rapport .= " - comparaison relative (precision : $precision_relative) -> OK\n";
}
#---ECHEC
else {
$is_grandeur_ECHEC = 1;
$sortie_rapport .= " - comparaison relative (precision : $precision_relative\%) -> ECHEC\n";
$sortie_rapport .= " - comparaison relative (precision : $precision_relative) -> ECHEC\n";
$sortie_rapport .= " -> Valeur = $valeur_temp\n";
$sortie_rapport .= " -> Valeur reference = $valeur_ref\n";
$sortie_rapport .= " -> Difference relative = $diff_relative_pourcent\%\n";
$sortie_rapport .= " -> Difference relative = $diff_relative\n";
}