NIMI
dc − laskin, jolla on rajoittamaton laskentatarkkuus
YLEISKATSAUS
dc
KUVAUS
Dc on ’’käänteistä puolalaista’’ laskentajärjestystä käyttävä pöytälaskin, jolla on rajoittamaton laskentatarkkuus. Se sallii myös makrojen määrittelyn ja kutsun. Normaalisti dc lukee vakiosyötettä; jos sille annetaan komentoriviargumentteja, ne ovat tiedostonimiä ja dc lukee ja suorittaa tiedostojen sisällön ennen kuin se lukee vakiosyötettä. Kaikki normaali tulostus menee vakiotulosteeseen. Kaikki virhetulostus menee virhetulosteeseen.
’’Käänteistä puolalaista’’ logiikkaa käyttävä laskin tallettaa luvut pinoon. Syötetty luku työnnetään pinoon. Laskutoimitukset ottavat argumentit pinosta ja työntävät tulokset pinoon.
Luvun syöttö dc-laskimeen tapahtuu näppäilemällä numerot ja mahdollisesti desimaalipiste. Eksponenttimuotoa ei voi käyttää. Negatiivisen luvun syöttö tapahtuu syöttämällä sen alkuun ’’_’’. Miinusmerkkiä ’’-’’ ei voi tässä käyttää, koska se on vähennyslaskun binäärinen operaattori. Kaksi lukua voi syöttää peräkkäin, jos ne erotetaan välilyönnillä tai rivinvaihdolla, joilla ei ole merkitystä komentoina.
Tulostuskomennot
p |
Tulostaa pinon päällimmäisen arvon muuttamatta pinoa. Arvon jälkeen tulostetaan rivinvaihto. | ||
P |
Tulostaa pinon päällimmäisen arvon ja tuhoaa sen; ei tulosta rivinvaihtoa. | ||
f |
Tulostaa pinon koko sisällön muuttamatta mitään. Tämä on hyvä komento, jos olet eksyksissä tai haluat tietää, mikä jonkin komennon vaikutus oli. |
Laskutoimitukset
+ |
Ottaa kaksi arvoa pinosta, laskee ne yhteen ja työntää tuloksen pinoon. Tuloksen tarkkuuden määrää vain argumenttien arvot ja se on riittävän suuri antamaan tarkan tuloksen. | ||
- |
Ottaa kaksi arvoa pinosta, vähentää ensin otetun toiseksi otetusta ja työntää tuloksen pinoon. | ||
* |
Ottaa kaksi arvoa pinosta, kertoo ne keskenään ja työntää tuloksen pinoon. Tuloksen desimaalien lukumäärää kontrolloi käypä tarkkuusarvo (katso alempana), eikä se riipu kerrottavien arvoista. | ||
/ |
Ottaa kaksi arvoa pinosta, jakaa toiseksi otetun ensin otetulla ja työntää tuloksen pinoon. Desimaalien lukumäärä riippuu tarkkuusarvosta. | ||
% |
Ottaa kaksi arvoa pinosta, laskee jakojäännöksen komennolla / suoritettavasta jakolaskusta ja työntää sen pinoon. Jakolasku tehdään niin monella desimaalilla kuin tarkkuusarvo määrittelee, ja jakojäännös lasketaan yhtä monella desimaalilla. | ||
~ |
Ottaa kaksi arvoa pinosta, jakaa toiseksi otetun arvon ensiksi otetulla. Osamäärä työnnetään ensin pinoon ja jakojäännös seuraavaksi. Tarkkuusarvo määrittelee jakolaskussa käytettyjen desimaalien lukumäärän. (Jono SdSn lnld/ LnLd% voi myös toteuttaa tämän funktion, virhetarkistuksen ollessa hiukan erilainen.) | ||
^ |
Ottaa kaksi arvoa pinosta ja tekee potenssiin korotuksen, jossa ensin otettu arvo on eksponentti ja toiseksi otettu on kantaluku. Eksponentin mahdollisia desimaaleja ei oteta huomioon. Tarkkuusarvo määrittelee pinoon työnnettävän tuloksen desimaalien lukumäärän. | ||
| |
Ottaa kolme arvoa pinosta ja laskee modulaarisen potenssiin korotuksen. Ensimmäinen pinosta otettu arvo on reduktiomodulus, jonka täytyy olla nollasta poikkeava ja tulisi olla kokonaisluku. Toista pinosta otettua arvoa käytetään eksponenttina; sen tulee olla ei-negatiivinen luku ja sen desimaaliosaa ei oteta huomioon. Kolmas pinosta otettu arvo on kantaluku, joka korotetaan potenssiin. Tarkkuusarvo määrää tuloksen desimaalien lukumäärän. Pienillä luvuilla tämä toimii samoin kuin jono Sm lble^ Lm%, mutta toisin kuin ^, tämä komento toimii mielivaltaisen suurilla eksponenteilla. | ||
v |
Ottaa pinosta yhden arvon, laskee sen neliöjuuren ja työntää tuloksen pinoon. Tarkkuusarvo määrittelee tuloksen desimaalien lukumäärän. |
Useimpiin laskutoimituksiin vaikuttaa ’’tarkkuusarvo’’, jonka voit asettaa komennolla k. Oletustarkkuus on nolla, mikä tarkoittaa sitä, että kaikki laskutoimitukset yhteen- ja vähennyslaskua lukuunottamatta antavat tulokseksi kokonaisluvun.
Jakojäännösoperaatio % vaatii selityksen: kun sitä sovelletaan argumentteihin ’’a’’ ja ’’b’’, se antaa tulokseksi ’’a - (b * (a / b))’’, jossa ’’a / b’’ lasketaan käytössä olevalla tarkkuudella.
Pinon hallinta
c |
Tyhjentää pinon. | ||
d |
Tekee pinon päällimmäisestä arvosta kaksoiskappaleen ja työntää sen pinoon. Siten ’’4d*p’’ laskee luvun 4 neliön ja tulostaa sen. | ||
r |
Vaihtaa pinon kahden päällimmäisen arvon järjestyksen. |
Rekisterit
Dc antaa käytettäväksi 256 muistirekisteriä, joilla jokaisella on yksimerkkinen nimi. Voit tallettaa luvun tai merkkijonon rekisteriin ja hakea sen myöhemmin.
sr |
Ottaa pinon päällimmäisen arvon ja tallettaa sen rekisteriin r. | ||
lr |
Kopioi arvon rekisteristä r ja työntää sen pinoon. Rekisterin r sisältö ei muutu. |
Jokaisella rekisterillä on myös oma pinonsa. Rekisterin käypä arvo on sen pinon päällimmäinen arvo.
Sr |
Ota (pää)pinon päällimmäinen arvo ja työnnä se rekisterin r pinoon. Rekisterin edelliseen arvoon ei pääse käsiksi. | ||
Lr |
Ota rekisterin r pinon päällimmäinen arvo ja työnnä se pääpinoon. Rekisterin r pinon edelliseen arvoon, jos sellainen on, voidaan nyt päästä käsiksi komennolla lr. |
Parametrit
Dc:llä on kolme parametria, jotka hallitsevat sen toimintaa: tarkkuus, syöttökantaluku ja tulostuskantaluku. Tarkkuus määrittelee useimpien laskutoimitusten tuloksen edellyttämän desimaalien lukumäärän. Syöttökantaluku valvoo syötettävien lukujen tulkintaa. Tulostuskantalukua käytetään lukuja kirjoitettaessa.
Syöttö- ja tulostuskantaluvut ovat erillisiä parametreja; voit asettaa ne erisuuriksi, mikä voi olla hyödyllistä tai häiritsevää. Syöttökantaluvun tulee olla välillä 2 -- 36 (mainitut arvot ml.). Tulostuskantaluvun tulee olla vähintään 2. Tarkkuuden tulee olla nolla tai suurempi. Tarkkuus mitataan aina desimaalilukuna riippumatta käytetystä syöttö- tai tulostuskantaluvun arvosta.
i |
Ottaa pinon päällimmäisen arvon ja asettaa sen syöttökantaluvun arvoksi. | ||
o |
Ottaa pinon päällimmäisen arvon ja asettaa sen tulostuskantaluvun arvoksi. | ||
k |
Ottaa pinon päällimmäisen arvon ja asettaa sen tarkkuuden arvoksi. | ||
I |
Työntää käytössä olevan syöttökantaluvun arvon pinoon. | ||
O |
Työntää käytössä olevan tulostuskantaluvun arvon pinoon. | ||
K |
Työntää käytössä olevan tarkkuusarvon pinoon. |
Merkkijonot
Dc voi
operoida lukujen ohella merkkijonoilla. Ainoa, mitä
merkkijonoilla voi tehdä, on niiden tulostus ja
suoritus makroina (mikä tarkoittaa sitä, että
merkkijonon sisältö prosessoidaan
dc-komentoina). Kaikki rekisterit ja pino voivat
sisältää merkkijonoja, ja dc
tietää aina, onko tietty kohde luku vai
merkkijono. Jotkut komennot (kuten laskutoimitukset)
vaativat lukuja argumenteiksi ja ilmoittavat virheestä,
jos ne saavat merkkijonoja. Toiset komennot
hyväksyvät kumman tahansa; esimerkiksi komento
p hyväksyy kumman tahansa ja tulostaa kohteen
sen tyyppiä vastaavasti.
[merkit]
Tekee merkkijonon, joka sisältää merkit (sijoitettuna merkkien [ ja ] väliin), ja työntää sen pinoon. Esimerkiksi [foo]P tulostaa merkit foo (ei rivinvaihtoa).
a |
Ottaa pinon päällimmäisen kohteen. Jos se oli luku, sen alin tavu konvertoidaan merkkijonoksi ja työnnetään pinoon. Muutoin pinon päällimmäinen kohde oli merkkijono ja sen ensimmäinen merkki työnnetään pinoon. | ||
x |
Ottaa arvon pinosta ja suorittaa sen makrona. Normaalisti sen pitäisi olla merkkijono; jos se on luku, se yksinkertaisesti työnnetään takaisin pinoon. Esimerkiksi [1p]x suorittaa makron 1p, joka työntää 1 pinoon ja tulostaa 1 erilliselle riville. |
Makrot talletetaan useimmiten rekistereihin; [1p]sa tallettaa makron, joka kirjoittaa 1 rekisteriin a ja lax kutsuu tämän makron.
>r |
Ottaa kaksi arvoa pinosta ja vertaa niitä olettaen, että ne ovat lukuja, toteuttaen rekisterin r sisällön makrona, jos alkuperäinen pinon päällimmäinen arvo on suurempi. Siten 1 2>a kutsuu rekisterin a sisällön, mutta 2 1>a ei kutsu. | ||
<r |
Kuten edellinen, mutta kutsuu makron, jos alkuperäinen pinon päällimmäinen arvo on pienempi. | ||
=r |
Kuten edelliset, mutta kutsuu makron, jos pinosta haetut luvut ovat yhtäsuuret. | ||
? |
Lukee rivin päätteeltä ja suorittaa sen. Tämä komento sallii makron pyytää tietoa käyttäjältä. | ||
q |
Poistuu makrosta ja myös sitä kutsuneesta makrosta. Kutsuttuna ylimmältä tasolta tai makrosta, jota on kutsuttu suoraan ylimmältä tasolta, komento q saa aikaan poistumisen ohjelmasta dc. | ||
Q |
Ottaa arvon pinosta ja käyttää sitä poistuttavien makrosuoritustasojen lukumääränä. Siten 3Q poistuu kolmelta makrotasolta. Komento Q ei koskaan aiheuta poistumista ohjelmasta dc. |
Tilakysely
Z |
Ottaa arvon pinosta, laskee sen numeroiden lukumäärän (tai merkkien lukumäärän, jos kyseessä on merkkijono) ja työntää tämän luvun pinoon. | ||
X |
Ottaa arvon pinosta, laskee sen desimaalien lukumäärän ja työntää tämän luvun pinoon. Merkkijonon kysymyksessä ollessa pinoon työnnettävä arvo on 0. | ||
z |
Työntää pinoon pinon syvyystiedon; pinossa olleiden kohteiden lukumäärä ennen komentoa z . |
Sekalaista
! |
Toteuttaa loput rivistä systeemikomentona. | ||
# |
Tulkitsee loput rivistä kommentiksi. | ||
:r |
Ottaa pinon kaksi päällimmäistä arvoa. Vanha toiseksi päällimmäinen pinon arvo talletetaan taulukkoon r, joka indeksoidaan vanhalla päällimmäisellä pinon arvolla. | ||
;r |
Ottaa pinon päällimmäisen arvon ja käyttää sitä indeksinä taulukkoon r. Valittu arvo työnnetään pinoon. |
HUOMAUTUKSIA
Taulukko-operaatioita : ja ; käytetään tavallisesti vain ohjelman bc perinteisissä toteutuksissa. ( GNU bc on itsenäinen ohjelma, joka ei tarvitse ohjelmaa dc toimiakseen.)
BUGIT
Postita bugiraportit (englanniksi!) osoitteeseen bug-gnu-utils [AT] prep.edu. Muista kirjoittaa sana ’’dc’’ kenttään ’’Subject:’’ .