bc — język kalkulatora dowolnej precyzji
Na Debian Package of the Day znalazłem kiedyś opis programu bc. bc jest czymś w rodzaju miniaturowego środowiska do obliczeń numerycznych czy, innymi słowy, konsolowym kalkulatorem z możliwością pisania skryptów. Przy standardowym uruchomieniu nie potrafi wiele, ale wywołując go poleceniem bc -l ładujemy standardową bibliotekę matematyczną, która daje nam całkiem ciekawe możliwości. Oto przykład zabawy z liczbą π przy bardzo dużej precyzji:
scale=100
pi=4*a(1)
pi
3.141592653589793238462643383279502884197169399375105820974944592307\
8164062862089986280348253421170676
pi^100
51878483143196131920862615246303013562686760680405.78499007184235808\
21881443917044488975069457784017111468121839594952358845749712503052\
943832056191336
Funkcja a() to arcus tangens. bc, niestety, charakteryzuje się dość nerdowską nomenklaturą, ale możemy skorzystać ze skryptu definiującego standardowe nazwy dla funkcji. Możemy nawet dodać sobie do .bashrc:
export BC_ENV_ARGS='-q -l /home/vmario/bin/extensions.bc'
dzięki czemu bc będzie od razu ładował cały skrypt przy uruchomieniu (opcja -q zapobiega wyświetlaniu przywitania). I proszę bardzo:
pi=atan(1)*4
pi
3.14159265358979323844
Teraz możemy ubogacić nasze skrypty bashowe. Obok zwykłego $((2+2)) lub karkołomnych konstrukcji z wykorzystaniem expr, możemy posłużyć się poleceniem bc:
$ a=$(echo "sin(8)^3" | bc)
$ echo $a
.96841327546919229461

niedziela, 12 października 2008 @ 22:43
bc – jest prostym językiem, ale o wielkich możliwościach, który zaskoczył mnie parę razy pozytywnie i zdarzyły się niestety nieoczekiwane niespodzianki… Udało mi się zaprzęgnąć bc i (La)TeX do wspólnej pracy:
– bc do obliczeń,
– (La)TeX-a do składu.
Pakiet nazywa się CalcTeX i jest dostępny http://sg.bzip.pl/CalcTeX choć w wersjach na stronie używany jest python zamiast bc, ale można używałem bc również. Pakiet umożliwia generowanie dokumentów z obliczeniami sformatowanymi w GUSTowny sposób przerz TeX-a/LaTeX-a, co rozszerza możliwości bc.
Na stronie dostępne są przykłady…