Bc (ohjelmointikieli)

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.

Gavin D. Howardin bc tulee FreeBSD:n versioiden 13 ja 14 mukana ja kuuluu BusyBox ja Androidin toybox-paketteihin.

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.

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ähteitä
 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

Ohjelmointikielet
Bell Labs
Vuoden 1975 ohjelmistot
Unix