Bc (Unix)
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.
Odmiany
POSIX bc
Oprócz prostych poleceń (np. 2*(3+4)^4) POSIX bc obsługuje:
- if(warunek) – wyrażenia warunkowe
- while(warunek) – pętle typu while
- for(wartość początkowa; warunek; operacja zwiększenia) – pętle typu for
- define – tworzenie funkcji
- return – zwracanie wartości przez funkcję
- operatory:
+ - * /
+= -= *= /=
++ -- < >
== != <= >=
( ) [ ] { }
% %=
^ ^=
- sqrt - pierwiastek kwadratowy
- zmienne
GNU bc
GNU bc oferuje te same polecenia co POSIX bc oraz:
- read – zezwala na odczyt danych liczbowych z klawiatury
- operatory logiczne:
&& || !
- komentarze (wszystkie znaki w linii po # są ignorowane)
Przykłady użycia
- Obliczanie liczby z dokładnością do 200 miejsc po przecinku.
$ bc -l scale=200 4*a(1)
- Wypisanie tabliczki mnożenia o rozmiarach 10x10.
for (i=1; i<=10; ++i){
for (j=1; j<=10; ++j)
print i*j, "\t"
print "\n"
}
- Rekurencyjne zdefiniowanie funkcji silnia.
define silnia(n){
if (n <= 1) return 1;
return n * silnia(n-1);
}
Potęgowanie
- Potęgowanie w POSIX bc
/* 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) ) )
}
- Potęgowanie w GNU bc
# 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) )
}
}
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.