Provided by: manpages-fi_4.27.0-1_all bug

NIMI

       bc - Mielivaltaisen tarkkuuden laskentakieli

SYNTAKSI

       bc [ -hlwsqv ] [long-options] [  file ... ]

KUVAUS

       bc  on  kieli,  jolla  voidaan  toteuttaa  vuorovaikutteisesti  lauseita, joissa käytetään mielivaltaisen
       tarkkuuden lukuja. Sen syntaksissa on yhtäläisyyksiä C-kielen syntaksin kanssa. Vakiomatematiikkakirjasto
       on saatavissa käyttöön komentorivioptiona. Matematiikkakirjasto määritellään  tällöin  ennen  tiedostojen
       käsittelyä.   bc  käynnistyy  käsittelemällä  kaikkien  komentorivillä lueteltujen tiedostojen sisältämän
       ohjelmakoodin siinä järjestyksessä kuin tiedostot on kutsuttu. Kun  kaikki  tiedostot  on  käsitelty,  bc
       lukee  vakiosyöttöä.   Kaikki  ohjelmakoodi  suoritetaan  sitä mukaa kuin se luetaan. (Jos tiedostossa on
       prosessorin pysäyttävä komento, bc ei koskaan lue vakiosyöttöä.)

       Tämä bc:n versio sisältää  lukuisia  laajennuksia  verrattuina  perinnäisiin  bc  toteutuksiin  ja  POSIX
       standardiluonnokseen.   Komentorivioptiot voivat aikaansaada näitä laajennuksia koskevan virheilmoituksen
       tai hylkäyksen. Tämä  dokumentti  kuvaa  tämän  prosessorin  hyväksymän  kielen.  Laajennukset  mainitaan
       erikseen.

   VALITSIMET
       -h, --help
              Print the usage and exit.

       -i, --interactive
              Force interactive mode.

       -l, --mathlib
              Määrittele vakiomatematiikkakirjasto.

       -w, --warn
              Varoita bc:n laajennuksista POSIXiin verrattuna.

       -s, --standard
              Käsittele POSIX bc kielen mukaisesti.

       -q, --quiet
              Älä tulosta normaalia GNU bc:n tervetuloilmoitusta.

       -v, --version
              Tulosta version numero ja copyright ja poistu.

   LUVUT
       The  most basic element in bc is the number.  Numbers are arbitrary precision numbers.  This precision is
       both in the integer part and the fractional part.  All numbers are represented internally in decimal  and
       all  computation  is  done  in  decimal.   (This  version  truncates  results  from  divide  and multiply
       operations.)  There are two attributes of numbers, the length and the scale.  The  length  is  the  total
       number  of  decimal  digits used by bc to represent a number and the scale is the total number of decimal
       digits after the decimal point.  For example:
               luvun .000001 pituus on 6 ja skaalaus 6.
               luvun 1935.000 pituus on 7 ja skaalaus 3.

   MUUTTUJAT
       Luvut talletetaan kahdentyyppisiin muuttujiin, so. yksinkertaisiin muuttujiin ja sääntiöihin.  Molemmille
       annetaan  nimi.  Nimet  alkavat  kirjaimella,  jota  seuraa  mielivaltainen määrä kirjaimia, numeroita ja
       alleviivoja.  Kaikkien  kirjainten  tulee  olla  pieniä  kirjaimia.  (Täydet  alfanumeeriset  nimet  ovat
       laajennus.  POSIX  bc:ssä  kaikki  nimet  ovat  yksittäisiä  pieniä  kirjaimia.) Muuttujan tyyppi selviää
       asiayhteydestä, koska kaikkia sääntiömuuttujan nimiä seuraavat hakasulut ([]).

       Käytössä on neljä erikoismuuttujaa, scale, ibase,  obase,  ja  last.   scale  määrittelee,  miten  jotkut
       operaatiot  käyttävät  numeroita  desimaalipisteen  jälkeen.   scale:n  oletusarvo  on  0. ibase ja obase
       määrittelevät  syötettävien  ja  tulostettavien  lukujen  kantaluvun.  Sekä   syötön   että   tulostuksen
       oletuskantaluku  on  10.   last  (laajennus)  on muuttuja, jolla on viimeksi tulostetun luvun arvo. Näitä
       tarkastellaan myöhemmin yksityiskohtaisemmin silloin kun on tarpeen. Kaikille näille muuttujille  voidaan
       sijoittaa arvo ja niitä voidaan käyttää lausekkeissa.

   KOMMENTIT
       Kommentit bc-kielessä alkavat merkkiparilla /* ja päättyvät merkkipariin */. Kommentit voivat alkaa mistä
       tahansa  ja näkyvät syötössä välilyöntinä. (Tämän seurauksena kommentit rajoittavat muita syöttöalkioita.
       Esimerkiksi kommentti ei voi olla muuttujanimen keskellä.)  Kommentit sisältävät kommentin alun ja  lopun
       väliset rivinvaihdot.

       Skriptien käytön helpottamiseksi bc:ssä siihen on lisätty laajennuksena yhden rivin kommentti, joka alkaa
       merkillä  #  ja  jatkuu  seuraavaan  rivinvaihtoon.  Rivinvaihto  ei  ole kommentin osa ja se käsitellään
       tavalliseen tapaan.

   LAUSEKKEET
       Lukuja käsitellään  lausekkeilla  (expressions)  ja  lauseilla  (statements).   Kun  kieli  suunniteltiin
       vuorovaikutteiseksi,  lausekkeet  ja  lauseet toteutetaan niin aikaisin kuin mahdollista. "Pääohjelmaa ei
       ole,  vaan  koodi  suoritetaan   silloin   kun   se   tulee   vastaan.   (Funktiot,   joita   käsitellään
       yksityiskohtaisesti jäljempänä, määritellään kun ne tulevat vastaan.)

       A  simple  expression  is  just a constant. bc converts constants into internal decimal numbers using the
       current input base, specified by the variable ibase. (There is an exception  in  functions.)   The  legal
       values  of  ibase  are 2 through 36. (Bases greater than 16 are an extension.)  Assigning a value outside
       this range to ibase will result in a value of 2 or 36.  Input numbers may contain the characters 0–9  and
       A–Z.  (Note: They must be capitals.  Lower case letters are variable names.)  Single digit numbers always
       have the value of the digit regardless of the value of ibase. (i.e. A = 10.)  For multi-digit numbers, bc
       changes all input digits greater or equal to ibase to the value of ibase-1.  This makes  the  number  ZZZ
       always be the largest 3 digit number of the input base.

       Täydelliset  lausekkeet  ovat  samanlaisia kuin monissa muissa korkean tason kielissä. Kun lukuja on vain
       yhtä  lajia,  ei  lukutyyppien  sekoitussääntöjä  tarvita.  Niiden  sijasta  on   käytössä   lausekkeiden
       skaalaussäännöt.  Jokaisella  lausekkeella on skaalaus. Se johdetaan alkuperäisten lukujen skaalauksesta,
       suoritetusta operaatiosta ja useissa tapauksissa muuttujan scale arvosta. Muuttujan scale lailliset arvot
       ovat välillä 0 - C-kielen maksimikokonaisluku.

       Seuraavassa laillisten  lausekkeiden  kuvauksessa  "expr"  tarkoittaa  täydellistä  lauseketta  ja  "var"
       yksinkertaista tai sääntiömuuttujaa.  Yksinkertainen muuttuja määritellään
              nimi
       ja sääntiömuuttuja
              nimi[expr]
       Ellei erityisesti toisin mainita, tuloksen skaalaus on käytettyjen lausekkeiden maksimiskaalaus.

       - expr Tulos on lausekkeen negaatio.

       ++ var Muuttujaa kasvatetaan yhdellä ja uusi arvo on lausekkeen tulos.

       -- var Muuttujaa pienennetään yhdellä ja uusi arvo on lausekkeen tulos.

       var ++
               Lausekkeen tulos on muuttujan arvo, minkä jälkeen muuttujaa kasvatetaan yhdellä.

       var -- Lausekkeen tulos on muuttujan arvo, minkä jälkeen muuttujaa pienennetään yhdellä.

       expr + expr
              Lausekkeen tulos on kahden lausekkeen summa.

       expr - expr
              Lausekkeen tulos on kahden lausekkeen erotus.

       expr * expr
              Lausekkeen tulos on kahden lausekkeen tulo.

       expr / expr
              Lausekkeen tulos on kahden lausekkeen osamäärä.  Tuloksen skaalaus on muuttujan scale arvo.

       expr % expr
              Lausekkeen  tulos  on  "jakojäännös"  joka  lasketaan  seuraavalla  tavalla.   a%b:n  laskemiseksi
              lasketaan  ensin  a/b  scale  numeron  tarkkuudella.   Tulosta  käytetään  laskettaessa  a-(a/b)*b
              skaalauksella,  joka  on  scale+scale(b):n  ja scale(a):n maksimiarvo. Jos scale:lle annetaan arvo
              nolla  ja   molemmat   lausekkeet   ovat   kokonaislukuja,   tämä   lauseke   on   kokonaislukujen
              jakojäännösfunktio.

       expr ^ expr
              Tulos on ensimmäisen lausekkeen arvo korotettuna toisen lausekkeen ilmoittamaan potenssiin. Toisen
              lausekkeen  täytyy  olla kokonaisluku.  (Jos toinen lauseke ei ole kokonaisluku, annetaan varoitus
              ja lauseke typistetään niin, että siitä  tulee  kokonaisluku.)  Tuloksen  skaalaus  on  scale  jos
              eksponentti  on  negatiivinen.  Jos  eksponentti  on  positiivinen,  tuloksen skaalaus on tuloksen
              skaalaus minimi ensimmäisen  lausekkeen  skaalauksesta  kertaa  eksponentin  arvo  ja  scale:n  ja
              ensimmäisen  lausekkeen  skaalauksen  maksimista. (esim. scale(a^b)  = min(scale(a)*b, max( scale,
              scale(a))).)  Huomattakoon, että expr^0 palauttaa aina arvon 1.

       ( expr )
              Muuttaa laskentajärjestyksen ja antaa lausekkeen tuloksen.

       var = expr
              Muuttujaan asetetaan lausekkeen arvo.

       var <op>= expr
              Yhtä kuin "var = var <op> expr" sillä poikkeuksella, että "var" osan arvo lasketaan  vain  kerran.
              Tällä on merkitystä, jos "var" on sääntiö.

       Vertailulausekkeet  ovat  erityislausekkeita,  jotka  antavat  aina tulokseksi 0 tai 1, 0 jos vertailu on
       epätosi ja 1 jos se on tosi.  Ne voivat esiintyä kaikissa  laillisissa  lausekkeissa.  (POSIX  bc  sallii
       vertailulausekkeiden  käytön  vain  if,  while  ja for lauseissa ja vain yhden vertailutestin tekemisen.)
       Vertailuoperaattorit ovat

       expr1 < expr2
              Tulos on 1 jos expr1 on pienempi kuin expr2.

       expr1 <= expr2
              Tulos on 1 jos expr1 on pienempi tai yhtäsuuri kuin expr2.

       expr1 > expr2
              Tulos on 1 jos expr1 on suurempi kuin expr2.

       expr1 >= expr2
              Tulos on 1 jos expr1 on suurempi tai yhtäsuuri kuin expr2.

       expr1 == expr2
              Tulos on 1 jos expr1 on yhtäsuuri kuin expr2.

       expr1 != expr2
              Tulos on 1 jos expr1 on erisuuri kuin expr2.

       Boolen operaatiot ovat  myös  laillisia.  (POSIX  bc  EI  tunne  boolen  operaatioita).  Kaikkien  boolen
       operaatioiden  tulos  on  0 tai 1 (vast. epätosi ja tosi) kuten vertailulausekkeissa. Boolen operaattorit
       ovat:

       !expr  Tulos on 1 jos expr on 0.

       expr && expr
              Tulos on 1 jos molemmat lausekkeet poikkeavat nollasta.

       expr || expr
              Tulos on 1 jos jompikumpi lauseke poikkeaa nollasta.

       Lausekkeen laskentajärjestys on seuraava: (alimmasta ylimpään)
              || operaattori, vasemmalle assosiatiivinen
              && operaattori, vasemmalle assosiatiivinen
              ! operaattori, ei-assosiatiivinen
              Vertailuoperaattorit, vasemmalle assosiatiivisia
              Sijoitusoperaattori, oikealle assosiatiivinen
              + ja - operaattorit, vasemmalle assosiatiivisia
              *, / ja % operaattorit, vasemmalle assosiatiivisia
              ^ operaattori, oikealle assosiatiivinen
              unaari - operaattori, ei-assosiatiivinen
              ++ ja -- operaattorit, ei-assosiatiivisia

       Laskentajärjestys  on  valittu  niin,  että  POSIX  yhteensopivat  bc  ohjelmat  toimivat  oikein.  Tämän
       seurauksena   vertailu-   ja   loogiset   operaattorit  käyttäytyvät  epätavallisesti  sijoituslauseissa.
       Tarkastellaan lauseketta
              a = 3 < 5

       Useimmat C-ohjelmoijat olettaisivat, että tässä  sijoitettaisiin  lausekkeen  "3  <  5"  tulos  (arvo  1)
       muuttujaan "a". Se mitä bc tekee on arvon 3 sijoitus muuttujaan "a" ja sitten vertailu 3 ja 5 välillä. On
       paras  käyttää  sulkuja,  jos  käyttää  vertailu- ja loogisia operaattoreita yhdessä sijoitusoperaattorin
       kanssa.

       bc:ssa  on  lisäksi  muutamia  muita  erikoisoperaattoreita,  joita  käytetään  käyttäjän  määrittelemien
       funktioiden  ja  vakiofunktioiden  kanssa.   Niiden  ulkonäkö  on  "name(parameters)".   Katso  käyttäjän
       funktioita koskevaa lukua. Vakiofunktiot ovat:

       length ( expression )
              length (pituus) funktion arvo on lausekkeen merkitsevien numeroiden lukumäärä.

       read ( )
              read funktio (laajennus) lukee luvun vakiosyötöstä riippumatta  siitä,  missä  funktio  kohdataan.
              Tämä  voi  aiheuttaa  pulmia  vakiosyötöstä tulevien tietojen ja ohjelman sekoittuessa. Paras tapa
              käyttää tätä funktiota on käyttää sitä valmiissa ohjelmassa lukemaan käyttäjän  syöttämää  tietoa,
              mutta ei koskaan sallia ohjelmakoodin syöttämistä sille.  read-funktion arvo on luku, joka luetaan
              vakiosyötöstä käyttämällä ibase:n käypää arvoa konversiokantalukuna.

       scale ( expression )
              scale funktion arvo on lausekkeen desimaalipisteen jälkeisten numeroiden lukumäärä.

       sqrt ( expression )
              sqrt  (neliöjuuri)  funktion arvo on lausekkeen neliöjuuri. Jos lauseke on negatiivinen, tuloksena
              on ajoaikainen virhe.

   LAUSEET
       Kuten  useimmissa  algebrallisissa  kielissä,  myös  bc:ssä  lauseet  jonouttavat  lausekkeiden   arvojen
       laskennan. bc:ssä lauseet suoritetaan "niin pian kuin mahdollista". Suoritus tapahtuu, kun koodissa tulee
       vastaan  rivinvaihto  ja  yksi  tai  useampia valmiita lauseita on olemassa. Tämän välittömän suorituksen
       takia rivinvaihdot ovat hyvin  tärkeitä  bc-kielessä.  Sekä  puolipistettä  että  rivinvaihtoa  käytetään
       lauseenerottimina.  Väärään paikkaan sijoitettu rivinvaihto aiheuttaa syntaksivirheen. Koska rivinvaihdot
       ovat lauseenerottimia,  on  mahdollista  kätkeä  rivinvaihto  käyttämällä  kenoviivamerkkiä.   Merkkijono
       "\<nl>", jossa <nl> on rivinvaihto, näkyy bc:lle välilyöntinä eikä rivinvaihtona. Lauselista (a statement
       list)  on  puolipisteiden  ja rivinvaihtojen erottama sarja lauseita. Seuraavassa on lista bc-lauseita ja
       kuvaukset siitä, mitä ne tekevät: (Hakasulkuihin suljetut osat ([]) ovat lauseen valinnaisia osia.)

       expression
              Tämä   lause   tekee   jomman   kumman   kahdesta   asiasta.   Jos   lauseke   alkaa   "<muuttuja>
              <sijoitusoperaattori>  ...",  se  on  sijoituslause.  Jos  lauseke  ei ole sijoituslause, sen arvo
              lasketaan ja tulostetaan.  Kun luku on tulostettu, tulostetaan rivinvaihto. Esimerkiksi  "a=1"  on
              sijoituslause  ja  "(a=1)"  on  lauseke,  jossa  on upotettu sijoitus.  Kaikki tulostettavat luvut
              tulostetaan  käyttäen  kantalukuna  muuttujan  obase  määrittelemää  kantalukua.  Muuttujan  obase
              lailliset  arvot  ovat  välillä  2  - BC_BASE_MAX. (Katso kappaletta RAJAT.)  Kantaluvuilla 2 - 16
              kirjoitetaan tavalliseen tapaan  numeroita.   Jos  kantaluku  on  suurempi  kuin  16,  bc  käyttää
              monimerkkistä  tulostusmenetelmää,  jossa  16  suuremmat  kantaluvut kirjoitetaan kymmenkantaisina
              lukuina, jotka erotetaan toisistaan välilyönnein.  Kukin tällainen "numero"  sisältää  niin  monta
              merkkiä kuin tarvitaan esittämään "obase-1" kymmenkantaisena lukuna. Kun luvut ovat tarkkuudeltaan
              mielivaltaisen  suuria,  joitakin  niistä  ei  voida  tulostaa yhdelle riville.  Nämä pitkät luvut
              jaetaan usealle riville  käyttämällä  merkkiä  "\"  rivin  viimeisenä  merkkinä.  Riville  voidaan
              tulostaa  enintään  70  merkkiä.  bc:n vuorovaikutteisesta tulostustavasta seuraa sivuvaikutuksena
              tulostetun arvon sijoitus erityismuuttujaan  last.  Tämä  tekee  käyttäjälle  mahdolliseksi  ottaa
              talteen  viimeksi  tulostettu  arvo  tarvitsematta  kirjoittaa  uudelleen lauseketta, joka tulosti
              luvun. Sijoitus muuttujaan last on laillinen ja  korvaa  viimeksi  tulostetun  arvon  sijoitetulla
              arvolla.  Sijoitettu arvo säilyy kunnes uusi luku tulostetaan tai uusi arvo sijoitetaan muuttujaan
              last. (Jotkut installaatiot voivat  hyväksyä  yhden  pisteen  (.)   käytön  "pikakirjoitusmerkkinä
              muuttujanimen last sijasta.)

       string Merkkijono  ("string")  kirjoitetaan  tulostukseen.  Merkkijonot alkavat kaksoislainausmerkillä ja
              sisältävät  kaikki  merkit  seuraavaan  kaksoislainausmerkkiin   asti.   Kaikki   merkit   otetaan
              sellaisinaan, myös rivinvaihdot. Rivinvaihtomerkkiä ei tulosteta merkkijonon jälkeen.

       print list
              print-lause  (laajennus)  on  tulostusmenetelmä.  "list"  on  pilkuilla  erotettu merkkijonojen ja
              lausekkeiden lista. Kukin merkkijono tai lauseke  tulostetaan  listan  mukaisessa  järjestyksessä.
              Loppuun  ei tulosteta rivinvaihtomerkkiä. Lausekkeiden arvot lasketaan, tulostetaan ja sijoitetaan
              muuttujaan  last.  print-lauseen  merkkijonot  tulostetaan.   Niissä  voi  olla   erikoismerkkejä.
              Erikoismerkit  alkavat  kenoviivalla (\).  bc tuntee seuraavat erikoismerkit: "a" (alert or bell),
              "b" (backspace), "f" (form feed), "n" (newline), "r" (carriage return), "q"  (double  quote),  "t"
              (tab), and "\" (backslash).  Muita kenoviivan jälkeisiä merkkejä ei oeta huomioon.

       { lause_lista }
              Tämä on yhdistelmälause. Se sallii useiden lauseiden yhteenryhmityksen suoritusta varten.

       if ( lauseke ) lause1 [else lause2]
              if-lause  laskee  lausekkeen  arvon ja suorittaa joko lauseen lause1 tai lauseen lause2 lausekkeen
              arvosta riippuen. Jos lauseke poikkeaa nollasta, suoritetaan lause1. Jos  lause2  on  olemassa  ja
              lausekkeen arvo on 0, lause2 suoritetaan. (else-lause on laajennus.)

       while ( lauseke ) lause
              while-lause  suorittaa  lauseen,  jos  lauseke poikkeaa nollasta. Se laskee lausekkeen arvon ennen
              lauseen jokaista suoritusta. Silmukasta poistutaan, kun lauseke saa arvon 0 tai  silmukan  sisällä
              suoritetaan break-lause.

       for ( [lauseke1] ; [lauseke2] ; [lauseke3] ) lause
              for-lause valvoo lauseen toistuvaa suoritusta. Lausekkeen lauseke1 arvo lasketaan ennen silmukkaa.
              Lausekkeen  lauseke2  arvo  lasketaan ennen lauseen jokaista suoritusta. Jos se poikkeaa nollasta,
              lause suoritetaan.  Lauseen jokaisen suorituksen jälkeen lasketaan lausekkeen lauseke3 arvo  ennen
              kuin  lausekkeen lauseke2 arvo lasketaan uudestaan. Jos lauseke1 tai lauseke3 puuttuvat, mitään ei
              lasketa siinä kohdassa, jossa niiden arvot tulisi laskea. Jos lauseke2 puuttuu, vaikutus  on  sama
              kuin  arvo  1  olisi  lausekkeen lauseke2 tilalla. (Valinnaiset lausekkeet on laajennus.  POSIX bc
              vaatii kaikki kolme lauseketta.)  Seuraava koodi on samanarvoinen for-lauseen kanssa:
              lauseke1;
              while (lauseke2) {
                 lause;
                 lauseke3;
              }

       break  Tämä lause aiheuttaa pakollisen poistumisen viimeksi aloitetusta while- tai for-lauseesta.

       continue
              continue-lause  (laajennus)  aikaansaa  viimeksi  aloitetun  for-lauseen   aloittamaan   seuraavan
              iteraation.

       halt   halt-lause (laajennus) on suoritettava lause, joka lopettaa bc prosessorin toiminnan vain silloin,
              kun  se  suoritetaan.  Lauseke "if (0 == 1) halt" ei lopeta bc:n toimintaa, koska halt-lausetta ei
              suoriteta.

       return Palauttaa arvon 0 funktiosta. (Katso lukua funktioista.)

       return ( lauseke )
              Return the value of the expression from a function.   (See  the  section  on  functions.)   As  an
              extension, the parenthesis are not required.

   VALELAUSEET
       Nämä  lauseet  eivät  ole  lauseita vakiintuneessa mielessä. Ne eivät ole suoritettavia lauseita, vaan ne
       toteutetaan "käännösaikana".

       limits Tulostaa bc:n paikallisen toteutuksen mukaiset rajat. Tämä on laajennus.

       quit   Kun quit-lause luetaan, bc-prosessori lopettaa toimintansa  riippumatta  siitä,  missä  quit-lause
              löytyy. Esimerkiksi "if (0 == 1) quit" aikaansaa bc:n lopetuksen.

       warranty
              Tulostaa pitkähkön vastuuhuomautuksen (laajennus).

   FUNKTIOT
       Funktiot  tarjoavat keinon määritellä laskutoimitus myöhempää suoritusta varten.  bc :n funktiot laskevat
       aina arvon ja palauttavat sen kutsuvalle ohjelmalle.  Funktiomääritykset ovat "dynaamisia" siinä mielessä
       että funktio on määrittelemätön kunnes määrittely tulee vastaan  syötössä.  Tätä  määrittelyä  käytetään,
       kunnes  toinen  samanniminen  määrittely tulee vastaan. Tällöin uusi määrittely korvaa vanhemman. Funktio
       määritellään seuraavasti:
              define nimi ( parametrit ) { rivinvaihto     auto_lista   lause_lista }
       Funktiokutsu on seuraavan muotoinen lauseke: "nimi(parametrit)".

       Parameters are numbers or arrays (an extension).  In the function definition, zero or more parameters are
       defined by listing their names separated by commas.  All parameters are call by value parameters.  Arrays
       are specified in the parameter definition by  the  notation  "name[]".   In  the  function  call,  actual
       parameters  are  full expressions for number parameters.  The same notation is used for passing arrays as
       for defining array parameters.  The named array is passed by  value  to  the  function.   Since  function
       definitions are dynamic, parameter numbers and types are checked when a function is called.  Any mismatch
       in  number  or  types  of parameters will cause a runtime error.  A runtime error will also occur for the
       call to an undefined function.

       The auto_list is an optional list of variables that are for "local" use.  The syntax of the auto list (if
       present) is "auto name, ... ;".  (The semicolon is optional.)  Each name is the name of an auto variable.
       Arrays may be specified by using the same notation as used in parameters.   These  variables  have  their
       values  pushed onto a stack at the start of the function.  The variables are then initialized to zero and
       used throughout the execution of the function.  At function exit, these variables are popped so that  the
       original  value  (at the time of the function call)  of these variables are restored.  The parameters are
       really auto variables that are initialized to a value provided in the function call.  Auto variables  are
       different  than traditional local variables because if function A calls function B, B may access function
       A's auto variables by just using the same name, unless function B has called them auto variables.  Due to
       the fact that auto variables and parameters are pushed onto a stack, bc supports recursive functions.

       Funktion  runko  on  lista  bc-lauseita.  Tässäkin  lauseet   erotetaan   toisistaan   puolipistein   tai
       rivinvaihdoin. Return-lauseet aikaansaavat funktion päättymisen ja arvon palautuksen.  Return-lauseita on
       kahta  versiota.  Näistä  ensimmäinen,  "return", palauttaa arvon 0 kutsuneelle funktiolle. Toinen muoto,
       "return ( lauseke )", laskee lausekkeen arvon ja palauttaa sen kutsuneelle funktiolle.  Jokaisen funktion
       lopussa on oletettu "return  (0)",  joka  lopettaa  funktion  suorituksen  ja  palauttaa  arvon  0  ilman
       eksplisiittistä return-lausetta.

       Funktiot  muuttavat  myös muuttujan ibase käyttötapaa. Kaikki funktiorungon vakiot konvertoidaan käyttäen
       funktiokutsun aikaista muuttujan ibase arvoa.Muuttujan ibase arvon muutoksia ei oteta  huomioon  funktion
       suorituksen  aikana  lukuunottamatta  standardifunktiota  read,  joka  käyttää  aina ibase:n käypää arvoa
       lukujen konversioon.

       Several extensions have been added to functions.  First, the format of the definition has  been  slightly
       relaxed.  The standard requires the opening brace be on the same line as the define keyword and all other
       parts  must be on following lines.  This version of bc will allow any number of newlines before and after
       the opening brace of the function.  For example, the following definitions are legal.
               define d (n) { return (2*n); }
              define d (n)
                { return (2*n); }

       Functions may be defined as void.  A void function returns no value and thus may not be used in any place
       that needs a value.  A void function does not produce any output when called by itself on an input  line.
       The key word void is placed between the key word define and the function name.  For example, consider the
       following session.
               define py (y) { print "--->", y, "<---", "\n"; }
              define void px (x) { print "--->", x, "<---", "\n"; }
              py(1)
              --->1<---
              0
              px(1)
              --->1<---

       Since  py  is  not  a void function, the call of py(1) prints the desired output and then prints a second
       line that is the value of the function.  Since the value of a function that  is  not  given  an  explicit
       return  statement  is zero, the zero is printed.  For px(1), no zero is printed because the function is a
       void function.

       Also, call by variable for arrays was added.  To declare a call by variable array, the declaration of the
       array parameter in the function definition looks like "*name[]".  The call to the  function  remains  the
       same as call by value arrays.

   MATEMAATTINEN KIRJASTO
       Jos  bc  kutsutaan  -l  optiota käyttäen, matemaattinen kirjasto ladataan ja oletusskaalaukselle annetaan
       arvo 20.  Matemaattiset funktiot laskevat tuloksensa käyttäen niiden kutsumisen  aikaista  skaalausarvoa.
       Matemaattisessa kirjastossa on seuraavat funktiot:

       s (x)  Sini x:stä, x radiaaneina.

       c (x)  Kosini x:stä, x radiaaneina.

       a (x)  Arcustangentti x:stä, palauttaa tuloksen radiaaneina.

       l (x)  Luonnollinen logaritmi x:stä.

       e (x)  Exponenttifunktio, jossa e korotetaan potenssiin x.

       j (n,x)
              Kokonaislukukertalukua n oleva Bessel-funktio x:stä.

   ESIMERKKEJÄ
       Käytettäessä komentotulkkia /bin/sh, seuraava sijoittaa "pi" arvon komentotulkkimuuttujaan pi.
               pi=$(echo "scale=10; 4*a(1)" | bc -l)

       Seuraava on matemaattisen kirjaston eksponenttifunktion määrittely. Se on kirjoitettu käyttäen POSIX bc.
               scale = 20

              /* Uses the fact that e^x = (e^(x/2))^2
                 When x is small enough, we use the series:
                   e^x = 1 + x + x^2/2! + x^3/3! + ...
              */

              define e(x) {
                auto  a, d, e, f, i, m, v, z

                /* Check the sign of x. */
                if (x<0) {
                  m = 1
                  x = -x
                }

                /* Precondition x. */
                z = scale;
                scale = 4 + z + .44*x;
                while (x > 1) {
                  f += 1;
                  x /= 2;
                }

                /* Initialize the variables. */
                v = 1+x
                a = x
                d = 1

                for (i=2; 1; i++) {
                  e = (a *= x) / (d *= i)
                  if (e == 0) {
                    if (f>0) while (f--)  v = v*v;
                    scale = z
                    if (m) return (1/v);
                    return (v/1);
                  }
                  v += e
                }
              }

       Seuraava  koodi käyttää bc:n laajennuksia yksinkertaisen shekkitilisaldo-ohjelman toteuttamiseen. Ohjelma
       on paras pitää tiedostossa niin, että sitä ei aina tarvitse kirjoittaa uudelleen.
               scale=2
              print "\nCheck book program!\n"
              print "  Remember, deposits are negative transactions.\n"
              print "  Exit by a 0 transaction.\n\n"

              print "Initial balance? "; bal = read()
              bal /= 1
              print "\n"
              while (1) {
                "current balance = "; bal
                "transaction? "; trans = read()
                if (trans == 0) break;
                bal -= trans
                bal /= 1
              }
              quit

       Seuraava on rekursiivisen factoriaali-funktion määritelmä.
               define f (x) {
                if (x <= 1) return (1);
                return (f(x-1) * x);
              }

   READLINE AND LIBEDIT OPTIONS
       GNU bc can be compiled (via a configure option) to use the GNU readline input editor library or  the  BSD
       libedit  library.  This allows the user to do editing of lines before sending them to bc.  It also allows
       for a history of previous lines typed.  When this option is selected, bc has one more  special  variable.
       This  special  variable, history is the number of lines of history retained.  For readline, a value of -1
       means that an unlimited number of history lines are retained.  Setting the value of history to a positive
       number restricts the number of history lines to the number given.  The value of 0  disables  the  history
       feature.   The  default  value is 100.  For more information, read the user manuals for the GNU readline,
       history and BSD libedit libraries.  One can not enable both readline and libedit at the same time.

   EROAVUUDET
       Tämä bc :n versio on  toteutettu  POSIX  P1003.2/D11  luonnoksesta  ja  sisältää  useita  eroavuuksia  ja
       laajennuksia  verrattuna  luonnokseen  ja  perinnäisiin toteutuksiin. Sitä ei ole toteutettu perinnäiseen
       tapaan käyttämällä ohjelmaa dc(1). Tämä versio on yksi prosessi, joka tulkitsee (parses) ja ajaa ohjelman
       tavukoodikäännöksen (byte code translation). On olemassa "dokumentoimaton" optio (-c) joka  saa  ohjelman
       tulostamaan   tavukoodin   sen  toteuttamisen  sijasta.  Sitä  käytettiin  pääasiassa  debuggaamiseen  ja
       matemaattisen kirjaston valmistamiseen.

       Pääasiallinen  eroavuuksien  lähde  ovat  laajennukset,  joissa  jotakin  ominaisuutta   on   laajennettu
       toimivuuden parantamiseksi, ja lisäykset, joissa uusia ominaisuuksia on lisätty. Seuraava on eroavuuksien
       ja laajennusten luettelo.

       LANG environment
              Tämä versio ei ole POSIX standardin mukainen käsitellessään LANG ympäristömuuttujaa ja kaikkia LC_
              alkuisia ympäristömuuttujia.

       nimet  Traditionaalinen  ja  POSIX  bc  käyttävät  yhden  kirjaimen  nimiä  funktioilla,  muuttujilla  ja
              sääntiöillä.  Nämä nimet on laajennettu monimerkkisiksi  nimiksi,  jotka  alkavat  kirjaimella  ja
              voivat sisältää kirjaimia, numeroita ja alleviivamerkkejä.

       Merkkijonot
              Merkkijonoissa ei saa olla NUL-merkkejä. POSIX sallii kaikkien merkkien käytön merkkijonoissa.

       last   POSIX bc:ssä ei ole last muuttujaa. Jotkut bc toteutukset käyttävät pistettä (.) samaan tapaan.

       vertailut
              POSIX bc sallii vertailut vain if-lauseessa, while-lauseessa ja for-lauseen toisessa lausekkeessa.
              Lisäksi vain yksi vertailuoperaatio on sallittu jokaisessa näistä lauseista.

       if-lause, else-lause
              POSIX bc:ssa ei ole else-lausetta.

       for-lause
              POSIX bc vaatia kaikkien lausekkeiden olemassaolon for-lauseessa.

       &&, ||, !
              POSIX bc:ssa ei ole loogisia operaattoreita.

       read funktio
              POSIX bc:ssa ei ole read funktiota.

       print-lause
              POSIX bc:ssa ei ole print-lausetta.

       continue-lause
              POSIX bc:ssa ei ole continue-lausetta.

       return statement
              POSIX bc requires parentheses around the return expression.

       sääntiöparametrit
              POSIX  bc  ei  (toistaiseksi)  täysin  tue  sääntiöparametreja.  POSIX kielioppi hyväksyy sääntiöt
              funktion  määrityksessä,  mutta  ei  tarjoa  menetelmää  sääntiön  määrittelemiseksi   todellisena
              parametrina.   (Tässä  on  todennäköisimmin kysymys kieliopin laatijan huomaamattomuudesta.)  bc:n
              perinnäisissä toteutuksissa on käytössä vain sääntiöparametrien arvoina kutsuminen.

       function format
              POSIX bc requires the opening brace on the same line as the define key word and the auto statement
              on the next line.

       =+, =-, =*, =/, =%, =^
              POSIX bc ei edellytä  näiden  "vanhantyylisten"  sijoitusoperaattorien  määrittelyä.  Tämä  versio
              sallii  nämä  "vanhantyyliset" sijoitukset.  Käytä limits-lausetta nähdäksesi, tukeeko installoitu
              versio niitä.  Jos se ei tue "vanhantyylisiä" sijoitusoperaattoreita, lause "a =- 1" vähentää  a:n
              arvoa yhdellä sen sijaan, että se sijoittaisi siihen arvon -1.

       välilyönnit luvun sisällä
              Muut  bc:n  toteutukset sallivat välilyöntejä luvun sisällä. Siten lause "x=1 3" sijoittaisi arvon
              13 muuttujaan x.  Sama lause aiheuttaisi syntaksivirheen tässä versiossa.

       Virheet ja ohjelman suoritus
              Tämä toteutus poikkeaa muista toteutuksista siinä, miten koodi suoritetaan kun syntaksi- ja  muita
              virheitä   löytyy   ohjelmasta.   Jos   syntaksivirhe  löytyy  funktion  määrittelystä,  virheestä
              toipumisrutiini yrittää löytää lauseen alun ja jatkaa funktion tulkintaa.  Kun  funktiosta  löytyy
              syntaksivirhe,  funktiota  ei  voi  kutsua  ja  siitä  tulee  määrittelemätön.   Vuorovaikutteisen
              suoritettavan  koodin  syntaksivirheet  tekevät   suorituksen   alaisesta   lohkosta   epävalidin.
              Suoritettava lohko lopetetaan sen rivin lopussa, joka seuraa täydellistä lausejonoa.  Esimerkiksi
              a = 1
              b = 2
       on kaksi suoritettavaa lohkoa ja
              { a = 1
                b = 2 }
       on   yksi  suoritettava  lohko.  Ajoaikainen  virhe  lopettaa  suorituksen  alaisen  lohkon  suorituksen.
       Ajoaikainen varoitus ei lopeta suorituksen alaisen lohkon suoritusta.

       Keskeytykset
              Vuorovaikutteisen istunnon aikana SIGINT signaali (jonka tavallisesti kehittää päätteeltä  annettu
              control-C  merkki)  keskeyttää  suorituksen  alaisen  lohkon suorituksen. Se näyttää "ajoaikaisen"
              virheen, joka osoittaa että funktio keskeytettiin. Kun kaikki ajoaikaiset rakenteet  on  siivottu,
              tulostetaan  ilmoitus  käyttäjälle  siitä,  että  bc  on  valmis  ottamaan  vastaan tietoa. Kaikki
              aikaisemmin määritellyt funktiot säilyvät määriteltyinä ja kaikkien  ei-automaattisten  muuttujien
              arvot  ovat  keskeytyskohdan  arvoja.  Kaikki  automaattiset  muuttujat  ja funktioiden parametrit
              poistuvat siivousprosessissa. Ei-interaktiivisen istunnon aikana annettu SIGINT signaali  lopettaa
              koko bc-ajon.

   RAJAT
       Tämä bc prosessori käyttää nykyisin seuraavia raja-arvoja. Joitakin niistä on ehkä muutettu installoinnin
       yhteydessä. Käytä limits-lausetta nähdäksesi todelliset arvot.

       BC_BASE_MAX
              Tulostuskantaluvun  maksimiarvo  on nykyisin asetettu arvoon 999.  Syöttökantaluvun maksimiarvo on
              16.

       BC_DIM_MAX
              Nykyisissä jakeluversioissa käytetään mielivaltaista arvoa 65535.  Sinun installaatiosi  arvo  voi
              olla toinen.

       BC_SCALE_MAX
              Desimaalipisteen  jälkeisten  numeroiden  lukumäärä  on  rajoitettu  INT_MAX  numeroon. Myös ennen
              desimaalipistettä olevien numeroiden määrä on rajoitettu INT_MAX numeroon.

       BC_STRING_MAX
              Merkkijonon merkkien lukumäärä on rajoitettu INT_MAX merkkiin.

       eksponentti
              Eksponentin arvo potenssiinkorotusoperaatiossa (^) on rajoitettu arvoon LONG_MAX.

       muuttujanimet
              Nykyinen raja yksikäsitteisten nimien lukumäärälle on  32767  sekä  yksinkertaisille  muuttujille,
              sääntiöille että funktioille.

YMPÄRISTÖMUUTTUJAT

       bc käsittelee seuraavia ympäristömuuttujia:

       POSIXLY_CORRECT
              Sama kuin -s optio.

       BC_ENV_ARGS
              Mekanismi,  jolla saadaan argumentteja bc-ohjelmalle. Muoto on sama kuin komentoriviargumenteilla.
              Nämä  argumentit  prosessoidaan  ensin,  niin  että   ympäristömuuttujissa   luetellut   tiedostot
              prosessoidaan   ennen   komentorivillä   annettuja   tiedostoja.   Käyttäjä   voi   siten  asettaa
              "standardioptioita  ja  -tiedostoja"  jotka   prosessoidaan   aina   ohjelmaa   bc   kutsuttaessa.
              Ympäristömuuttujissa  annetut  tiedostot  sisältävät  tavallisesti niiden funktioiden määritykset,
              jotka käyttäjä haluaa määritellä joka kerta kun bc ajetaan.

       BC_LINE_LENGTH
              This should be an integer specifying the number of characters in an output line for numbers.  This
              includes the backslash and newline characters for long numbers.  As an  extension,  the  value  of
              zero  disables  the multi-line feature.  Any other value of this variable that is less than 3 sets
              the line length to 70.

VIRHEILMOITUSTEN TULKINTA

       Jos komentorivillä mainittua tiedostoa ei voi avata,  bc  ilmoittaa  tiedosto  ei  ole  käytettävissä  ja
       lopettaa suorituksen. Käännös- ja ajoaikaiset diagnostiset ilmoitukset ovat itseselitteisiä.

BUGIT

       Virheistä toipuminen ei vielä ole kovin hyvä.

       Postita  bugiraportit  (englanniksi)  osoitteeseen  bug-bc@gnu.org.   Muista  lisätä  sana  “bc” kenttään
       “Subject:”.

TEKIJÄ

       Philip A. Nelson
       philnelson@acm.org

KIITOKSET

       Tekijä  haluaa  kiittää  Steve  Sommars'ia  (Steve.Sommars@att.com)   laajasta  sovelluksen   toteutuksen
       testausavusta ja monista erinomaisista parannusehdotuksista. Hänen ansiostaan tuote on paljon parantunut.

KÄÄNNÖS

       Tämän käsikirjan suomenkielisen käännöksen tekivät Tuukka Forssell <taf@jytol.fi>

       Tämä  käännös on ilmainen dokumentaatio; katso tekijänoikeusehdot GNU General Public License -versiosta 3
       tai uudemmasta. Emme ota vastuuta.

GNU Project                                    11. kesäkuuta 2006                                          bc(1)