[Bash] liczby zmiennoprzecinkowe w Bashu

Mat.Monia
Użytkownik
Użytkownik
Posty: 105
Rejestracja: 2 paź 2008, o 19:56
Płeć: Kobieta
Lokalizacja: Bydgoszcz
Podziękował: 7 razy
Pomógł: 2 razy

[Bash] liczby zmiennoprzecinkowe w Bashu

Post autor: Mat.Monia »

Napisalam w Bashu nastepujaca petle:

Kod: Zaznacz cały

for (( k=1; $k <= 4; k=$[k+1] )) ; do
      C[k]=$((${C[k-1]}+3/3.14*${zmienna[k]})) 
done
echo ${C[*]}

i wyskakuje mi nastepujacy blad:
1+3/3.14*165.4875404275: syntax error: invalid arithmetic operator (error token is ".14*165.4875404275")

Przyczyna sa liczby zmiennoprzecinkowe... Czy mozna to w jakis sposob obejscs?
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[Bash] liczby zmiennoprzecinkowe w Bashu

Post autor: lukequaint »

Tak, można. Bash nie wspiera obliczeń zmiennoprzecinkowych i aby je wykonać możesz wspomóc się m.in. językiem bc, w ten sposób:

Kod: Zaznacz cały

pi=3.14
e=2.72
echo $pi + $e | bc
Możesz znaleźć o tym więcej informacji tu , tu czy też tutaj http://bit.ly/Rynzbz. bc wydaje się być najprostszym rozwiązaniem. Innym może być wykorzystanie awk.
Mat.Monia
Użytkownik
Użytkownik
Posty: 105
Rejestracja: 2 paź 2008, o 19:56
Płeć: Kobieta
Lokalizacja: Bydgoszcz
Podziękował: 7 razy
Pomógł: 2 razy

[Bash] liczby zmiennoprzecinkowe w Bashu

Post autor: Mat.Monia »

Wielie dzieki!

-- 2 września 2012, 20:09 --

Pojawil mi sie jeszcze jeden problem we fragmencie kodu:

Kod: Zaznacz cały

C[0]=0

    for (( l=1; $l<=48; l=$((l+1)) )) ;
     do

         C[$l]=$(echo "${C[$l-1]} + 3 / 3.14*${name[$l]}" | bc -l )

     done
       echo ${C[48]} 
wszystko pieknie dziala, ale do momentu gdy skrypt ma wyliczyc wartosc dla l<48. Powyzej tej wartosci wyrzuca mi blad: (standard_in) 1: syntax error.

Czy da sie temu jakos zaradzic?-- 2 września 2012, 22:17 --Juz udalo mi sie rozwiazac problem
ODPOWIEDZ