bc (basic calculator, aluksi Bell calculator) on matemaattisten lausekkeiden käsittelyyn tarkoitettu täsmäkieli. bc kuuluu Unixin POSIX-standardiin ja tulee jokaisen Unix-käyttöjärjestelmän mukana. Kieli toteutetaan saman nimisellä ohjelmalla, jota voi käyttää interaktiivisesti komentoliittymällä tai shell-skripteissä matemaattisten lausekkeiden ratkaisuun.
bc on rajoittamattoman tarkkuuden kieli. Kuitenkin oletusasetuksena desimaalien määrä on nolla ja tulostettaessa desimaaliluvut pyöristetään alaspäin, joten esimerkiksi laskutoimituksen 2/3 tulos on nolla.
bc julkaistiin AT&T:n version 6 Unixissa vuonna 1975. Sen kirjoitti Bell Labsin Lorinda L. Cherry. Ohjelma oli käyttöliittymä Robert H. Morrisin ja Cherryn kirjoittamalle käänteistä puolalaista notaatiota käyttävälle rajoittamattoman tarkkuuden dc-ohjelmalle (desktop calculator).
Ohjelma standardoitiin POSIX-standardiksi 1991. Alkuperäinen ohjelma tulee useiden kaupallisten Unixien ja Plan 9 -käyttöjärjestelmän mukana. GNU-projektin bc:n kirjoitti Philip A. Nelson.https://www.gnu.org/software/bc/ https://www.gnu.org/software/bc/manual/html_mono/bc.html Gavin D. Howardin bc tulee FreeBSD:n version 13 mukana ja kuuluu BusyBox ja Androidin toybox-paketteihinhttps://rosettacode.org/wiki/Gavin_Howard%27s_bc sekä macOSiin Ventura-versiosta lähtien.https://gavinhoward.com/2023/02/my-code-conquered-another-os/ OpenBSD:ssa on oma Otto Moerbeekin tekemä toteutus, joka sisältää jotain GNU-laajennuksia. OpenBSD:n versio toimii dc:n päällä, kun GNU:n on suoraan C-kielellä kirjoitettu.https://rosettacode.org/wiki/OpenBSD_bc
Esimerkit bc:n kieli muistuttaa C-kieltä ja sisältää suunnilleen samat operaattorit ja kontrollirakenteet (if, while, for). Lausekkeiden arvot tulostetaan, jos niitä ei sijoiteta. bc perii dc:n rajoituksena yksikirjaimiset muuttujien nimet.
GNU:n ja OpenBSD:n versiot sisältävät laajennuksena loogiset operaattorit !, && ja || (¬, ∧ ja ∨). Lisäksi if-lauseelle on else-haara.
Seuraava komentoriviltä käynnistettävä esimerkki laskee piin arvon 10000 desimaalin tarkkuudella. bc on käynnistettävä -l-parametrilla, joka lataa standardikirjaston, joka sisältää trigonometriset funktiot. Ohjelma laskee arkustangentin arvon yhdellä radiaanilla ja kertoo sen neljällä. Ohjelman ajo voi kestää useita minuutteja: echo "scale=10000; 4*a(1);" | bc -lq
Seuraava funktio laskee kumulatiivisen normaalijakauman arvon: define phi(x) { auto s,t,b,q,i,const s=x; t=0; b=x; q=x*x; i=1 while(s!=t) s=(t=s)+(b*=q/(i+=2)) const=0.5*l(8*a(1)) # 0.91893... return .5+s*e(-.5*q-const) } phi(0) .50000000000000000000
Lähteet bc(1), bc - An arbitrary precision calculator language, General Commands Manual, GNU Project, 2006-06-11 bc(1), bc - arbitrary-precision arithmetic language and calculator, General Commands Manual, OpenBSD, March 8, 2021 https://rosettacode.org/wiki/Category:Bc
Viitteet
Luokka:Ohjelmointikielet Luokka:Bell Labs Luokka:Vuoden 1975 ohjelmistot Luokka:Unix