Liczby zmiennoprzecinkowe w bashu

Potrzebujesz pomocy z C, C++, perl, python, itp.
m_kordi
Posty: 12
Rejestracja: 01 września 2012, 22:41

Liczby zmiennoprzecinkowe w bashu

Post autor: m_kordi »

Mam jeszcze jedno pytanie. Stworzyłam następującą pętlę:

Kod: Zaznacz cały

C[0]=1

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 następujący błąd:

Kod: Zaznacz cały

1+3/3.14*165.4875404275: syntax error: invalid arithmetic operator (error token is ".14*165.4875404275")
Czy można ten problem jakoð obejść? Będę bardzo wdzięczna za podpowiedź, jak to zrobić.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Zastosuj kalkulator bc:

Kod: Zaznacz cały

C[0]=1

for (( k=1; $k <= 4; k=$[k+1] )) ; do
 C[k]=`echo "scale=5 ;(${C[k-1]}+3/3.14*${zmienna[k]})" | bc`
done
echo ${C
[*]}
I chyba powinno być ...3.14*${zmienna[k-1]}...
m_kordi
Posty: 12
Rejestracja: 01 września 2012, 22:41

Post autor: m_kordi »

Dziękuję.

Dodane:
Pojawił mi się 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 pięknie działa, ale do momentu gdy skrypt ma wyliczyć wartość dla l<48. Powyżej tej wartości wyrzuca mi błąd:

Kod: Zaznacz cały

(standard_in) 1: syntax error.
Czy da się temu jakoś zaradzić?
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

A jakie są wartości pozostałych zmiennych?
Skrypty bash można debugować, uruchom:

Kod: Zaznacz cały

bash -x ./nazwa_skryptu
Więcej tutaj: http://tldp.org/LDP/Bash-Beginners-Guid ... 02_03.html
m_kordi
Posty: 12
Rejestracja: 01 września 2012, 22:41

Post autor: m_kordi »

name[$l] jest tablicą, w której znajduje się około 50 wartości postaci:

Kod: Zaznacz cały

1.06856
0.918551
0.791689
0.683214
0.589537
0.50794
0.436348
0.373184
0.317245
0.267623
0.223623
0.18472
0.150504
0.120651
0.0948841
0.0729562
0.0546233
0.039628
0.027686
0.0184809
0.0116628
0.00685627
0.00367456
0.00173557
0.000681742
0.000199053
3.30819e-05
itd.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Jak pisałem wcześniej, uruchom skrypt z parametrem -x i zobacz co wyświetla przy ostatnim (48) przebiegu pętli, jakie parametry są przekazywane do bc?
ODPOWIEDZ