Bc (ohjelmointikieli)

Wikipediasta
Siirry navigaatioon Siirry hakuun
Tulostettavaa versiota ei enää tueta ja siinä voi olla renderöintivirheitä. Päivitä selaimesi kirjanmerkit ja käytä selaimen tavallista tulostustoimintoa sen sijaan.

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.[1][2] Gavin D. Howardin bc tulee FreeBSD:n version 13 mukana ja kuuluu BusyBox ja Androidin toybox-paketteihin[3] sekä macOSiin Ventura-versiosta lähtien.[4] 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.[5]

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