Script bash operations de réel
endefu
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
endefu Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
endefu Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je fais un script dans lequel j'appelle un programme fortran. Je voulais utiliser un algorithme de dicotomie pour ajuster un paramètre. Mon problème c'est que je manipule que des réels et les operations ou test que je fais me donne des erreurs. Je pense que mes erreurs viennent de mon ignorance sur la manipulation des reel dans un script bash.
Je vous montre une partie de mon script
(cette fonction appelle une autre fonction gap_lenteur qui rempli la variable $out_pairing)
Bon tout n'est pas interessant mais en gros mes problème viennent des comparaison dans les if. à la toute première opération je fais quelque chose comme 1.026945 - 1.31, ce qui me donne -.283055 et qui ne peut pas être comparé à 0.0. je sais pas si ca vient du test ou de l'operation.
Si vous avez une idée, Merci
Je fais un script dans lequel j'appelle un programme fortran. Je voulais utiliser un algorithme de dicotomie pour ajuster un paramètre. Mon problème c'est que je manipule que des réels et les operations ou test que je fais me donne des erreurs. Je pense que mes erreurs viennent de mon ignorance sur la manipulation des reel dans un script bash.
Je vous montre une partie de mon script
dichotomie () { force=$1 pairing=$2 type=$3 min=$4 max=$5 err=$6 #warning err = 2* err tem=0 tem2=0 tem3=0 left=$min gap_lenteur $force $pairing $left $type fleft=$(echo "scale=2; $out_pairing - $exp_pairing" | bc) right=$max gap_lenteur $force $pairing $right $type fright=$(echo "scale=2; $out_pairing - $exp_pairing" | bc) sign=0 tem2=$(echo "scale=2; $fleft*$fright" | bc) if (($tem2 > 0.0)) then echo "error1 dichotomie" exit fi if (($fleft < 0.0)) then sign=-1 else sign=1 fi while [ $tem == 0.0 ] do tem2=$(echo "scale=2; $left+$right" | bc) middle=$(echo "scale=2; $tem2/2" | bc) gap_lenteur $force $pairing $middle $type fmiddle=$(echo "scale=2; $out_pairing - $exp_pairing" | bc) if (( $sign == -1 )) then if (( $fmiddle < 0.0 )) then left=$middle fleft=$fmiddle else right=$middle fright=$fmiddle fi else if (( $fmiddle < 0.0 )) then right=$middle fright=$fmiddle else left=$middle fleft=$fmiddle fi fi tem2=$(echo "scale=2; $fright-$fleft" | bc) tem2=${tem2#-} if (( $tem2 < $err )) then tem3=$(echo "scale=2; $right+$left" | bc) tem=$(echo "scale=2; $tem3/2" | bc) fi done echo $tem }
(cette fonction appelle une autre fonction gap_lenteur qui rempli la variable $out_pairing)
Bon tout n'est pas interessant mais en gros mes problème viennent des comparaison dans les if. à la toute première opération je fais quelque chose comme 1.026945 - 1.31, ce qui me donne -.283055 et qui ne peut pas être comparé à 0.0. je sais pas si ca vient du test ou de l'operation.
Si vous avez une idée, Merci
A voir également:
- Script bash operations de réel
- Script vidéo youtube - Guide
- Maps satellite en temps réel - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Bingo bash - Télécharger - Divers Jeux
2 réponses
J'ai trouvé quelque part quelqu'un faire ca:
par exemple pour le premier test de mon code. Ca a l'air de marcher meme si je sais pas du tout d'ou cela vient.
faut encore que je vérifie par contre.
Merci pour la reponse jipicy j'irai voir awk qd je m'appercevrais que ca marche pas du tout, dans pas longtemps j'imagine.
if test `expr $tem2 \> 0` -eq 1
par exemple pour le premier test de mon code. Ca a l'air de marcher meme si je sais pas du tout d'ou cela vient.
faut encore que je vérifie par contre.
Merci pour la reponse jipicy j'irai voir awk qd je m'appercevrais que ca marche pas du tout, dans pas longtemps j'imagine.