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   -
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

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:

2 réponses

endefu Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai trouvé quelque part quelqu'un faire ca:

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.
1
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Le shell ne gère que les entiers.
Il te faut soit continuer le traitement avec "bc", soit voir du côté de "awk" peut être...
0