bc – uniksowy kalkulator dowolnej precyzji (zarówno przed, jak i po przecinku). Umożliwia operowanie liczbami w dowolnych systemach liczbowych (wejście możliwe w systemie maksymalnie szesnastkowym, wyjście w dowolnie dużym), wykonywanie skryptów itd.
Pierwotnie program opierał się na programie dc, tłumacząc zapis infiksowy na postfiksowy (odwrotna notacja polska), jednak obecnie wersja GNU jest autonomicznym programem.
bc posiada składnię podobną do języka C.
Oprócz prostych poleceń (np. 2*(3+4)^4) POSIX bc obsługuje:
+ - * /
+= -= *= /=
++ -- < >
== != <= >=
( ) [ ] { }
% %=
^ ^=
GNU bc oferuje te same polecenia co POSIX bc oraz:
&& || !
$ bc -l scale=200 4*a(1)
for (i=1; i<=10; ++i){
for (j=1; j<=10; ++j)
print i*j, "\t"
print "\n"
}
define silnia(n){
if (n <= 1) return 1;
return n * silnia(n-1);
}
/* Funkcja zwraca część całkowitą liczby */
define i(x) {
auto s
s = scale
scale = 0
x /= 1 /* zaokrągla x z niedomiarem */
scale = s
return (x)
}
/* Funkcja wykorzysuje fakt, iż x^y == e^(y*log(x)) */
define p(x,y) {
if (y == i(y)) {
return (x ^ y)
}
return ( e( y * l(x) ) )
}
# Funkcja zwraca część całkowitą liczby
define int(number) {
auto oldscale
oldscale = scale
scale = 0
number /= 1 /* round number down */
scale = oldscale
return number
}
# Funkcja wykorzysuje fakt, iż x^y == e^(y*log(x))
define power(number,exponent) {
if (exponent == int(exponent)) {
return number ^ exponent
} else {
return e( exponent * l(number) )
}
}