NÉV¶
dc - tetszőleges pontosságú számológép
ÁTTEKINTÉS¶
dc
LEÍRÁS¶
A
dc egy korlátlan pontosságú számítások
elvégzésére alkalmas fordított-lengyel (postfix) asztali
számológép, amely lehetőséget ad makrók
definiálására és végrehajtására. A
bemenetet a szabványos bemenetről veszi; ha argumentumot adsz meg
neki, azt fájlnévként értelmezi és azon fájlok
tartalmát veszi és hajtja végre, majd ezután olvas a
szabványos bemenetről. A kimenet a szabványos kimenet, a
hibák a szabványos hibakimenetre íródnak.
A fordított-lengyel számológép a számokat egy veremben
tárolja. Új szám bevitele esetén a szám a verem
tetejére kerül. A műveletek az argumentumukat a verem
tetejéről veszik, majd az eredményt visszateszik a verembe.
A bevitelhez a számot egyszerűen beírod, követheti
opcionálisan tizedespont. A hatványalak használata nem
támogatott. Negatív számok beviteléhez a számot ``_''
karakterrel kezdd. Az előjel nem lehet ``-'', mivel ez a kivonás
műveleti operátora. Több számot egymástól
szóközzel vagy új sorral elválasztva lehet bevinni, ezen
karakterek nem parancsok.
KIÍRÓ PARANCSOK¶
- p
- Kiírja a verem tetején levő számot a
verem megváltoztatása nélkül. A szám után
egy újsor karakter is kiíródik.
- P
- Kiveszi a verem tetejéről a számot,
kiírja, és nem ír utána újsor karaktert.
- f
- Kiírja a verem teljes tartalmát
anélkül, hogy bármit változtatna. Akkor jó, ha
teljesen eltévedtél, vagy ki akarod találni, hogy egy
parancs vajon mit csinált.
SZÁMÍTÁSOK¶
- +
- Leveszi a verem két felső elemét,
összeadja őket, és az eredményt a verembe helyezi. A
pontosságot kizárólag az argumentumok értéke
határozza meg.
- -
- Leveszi a verem két felső elemét, az
elsőt (ami eredetileg felül volt) kivonja a
másodikból, majd az eredményt a verembe helyezi.
- *
- Leveszi a verem két felső elemét,
összeszorozza őket, majd az eredményt a verembe helyezi. A
tizedesjegyek számát az aktuális
pontosságérték (l. lentebb) határozza meg, és nem
függ a szorzandóktól.
- /
- Leveszi a verem két felső elemét, az
elsőt elosztja a másodikkal, majd az eredményt a verembe
helyezi. A tizedesjegyek számát a pontosságérték
határozza meg.
- %
- Leveszi a verem két felső elemét, a /
által végzett osztás maradékát a verembe helyezi.
Az osztás a pontosságérték által
meghatározott pontossággal végződik el, és a
maradék is ennek megfelelő számú jegyre
számolódik ki.
- ~
- Leveszi a verem két felső elemét, az
elsőt elosztja a másodikkal. Először a hányadost,
aztán a maradékot helyezi a verembe. Az osztásban
használt tizedesjegyek értéke a
pontosságértéktől függ. (A SdSn lnld/
LnLd% hatása hasonló, a hibakezelése más egy
kicsit.)
- ^
- Leveszi a verem két felső elemét, az
elsőt (ami eredetilg felül volt) kitevőként, a
másodikat alapként használva elvégzi a
hatványozást. Ha a kitevőnek van törtrésze, azt
figyelmen kívül hagyja. A pontosságérték
határozza meg, hogy az eredmény hány tizedesjegyre
számítódik ki.
- |
- Törtkitevős hatványozást végez.
Leveszi a verem felső három elemét. Az első (ami
eredetileg felül volt) lesz a kitevő nevezője, ez nem lehet
nulla, és egésznek kell lennie. A második a kitevő
számlálója, ez nem lehet negatív. Ha van tizedesjegye,
azt figyelmen kívül hagyja. A harmadik szám lesz a
hatványozás alapja. A pontosságérték
határozza meg, hogy az eredmény hány tizedesjegyre
számítódik ki. Kis számok esetén hasonlít
hozzá a Sm lble^ Lm% szekvencia, de a ^-tól
eltérően ez a parancs nem alkalmazható tetszőlegesen
nagy kitevőkre.
- v
- Levesz egy elemet a veremről, kiszámítja a
négyzetgyökét, majd az eredményt a verembe helyezi. A
pontosságérték határozza meg, hogy hány
tizedesjegyre végződik el a számítás.
A legtöbb számítás eredményét befolyásolja a
k paranccsal beállítható pontosságérték.
Ez alapértelmezésben nulla, ami azt jelenti, hogy az
összeadás és a kivonás kivételével minden
művelet erdménye egész lesz.
A
% maradék-művelet kis magyarázatra szorul. Ha az
argumentumai ``a'' és ``b'', akkor a művelet eredménye ``a - (b
* (a / b))'', ahol ``a / b'' az aktuális pontosságérték
szerint számítódik.
VEREMKARBANTARTÁS¶
- c
- Kitörli a verem minden elemét, a verem üres
lesz.
- d
- A verem tetején levő elemet megduplázza
és a verem tetejére helyezi, így a ``4d*p'' eredménye
16.
- r
- Megfordítja (kicseréli) a verem két
felső elemét.
REGISZTEREK¶
A
dc 256 memóriaregisztert képes kezelni, mindegyikük neve
egyetlen karakter. A regiszterben tárolható és később
újrafelhasználható egy szám vagy egy karakterlánc.
- sr
- A verem tetején levő értéket leveszi
és az r regiszterben eltárolja.
- lr
- Az r regiszter tartalmát a verembe helyezi. Ez
a művelet nem változtatja meg az r regiszter
tartalmát.
Minden regiszternek megvan a saját verme, az aktuális
regiszterérték van a verem tetején.
- Sr
- A (fő) verem tetején levő értéket
leveszi és az r regiszter vermébe helyezi. A regiszter
előző értéke így elérhetetlen.
- Lr
- Az r regiszter verméből leveszi az elemet
és a fő verembe helyezi. Ha az r regiszter vermében
volt régebben valami érték, akkor az most a
lr paranccsal elérhetővé válik.
PARAMÉTEREK¶
A
dc működését három paraméter
befolyásolja: a pontosság, a beviteli alap és a kimeneti alap.
A pontosság határozza meg, hogy a műveletek
eredményéből hány tizedesjegy maradjon meg. A beviteli
alap mutatja meg, hogy a begépelt számok hányas
számrendszerben vannak; minden begépelt szám ebben a
számrendszerben értelmeződik. Számok kiírásakor
a számok a kimeneti alap szerinti számrendszerben íródnak
ki.
A beviteli és a kimeneti alapok különböző
paraméterek, nem kell feltétlenül egyenlőnek lenniük;
ez lehet hasznos és zavaró is. A bemeneti alap legalább 2,
legfeljebb 36 lehet. A kimeneti alapnak legalább 2-nek kell lennie. A
pontosságnak nullának vagy nagyobbnak kell lennie. A pontosság
a beviteli és kimeneti alaptól függetlenül mindig
tizedesjegyeket jelent.
- i
- Leveszi a verem tetején levő számot és
erre állítja a beviteli alapot.
- o
- Leveszi a verem tetején levő számot és
erre állítja a kimeneti alapot.
- k
- Leveszi a verem tetején levő számot és
erre állítja a pontosságot.
- I
- Az aktuális beviteli alapot a verem tetejére
helyezi.
- O
- Az aktuális kimeneti alapot a verem tetejére
helyezi.
- K
- A pontosság aktuális értékét a
verem tetejére helyezi.
KARAKTERLÁNCOK¶
A
dc képes karakterláncokat is kezelni. A karakterláncokat
csak tárolni vagy makróként végrehajtani (azaz a tartalmuk
dc parancsként értelmeződik) lehet. Karakterláncok
tárolására minden regiszter és a verem is képes.
Néhány parancs, mint például az aritmetikai műveletek
számokat várnak argumentumként, és hibát jeleznek, ha
karakterláncot találnak helyette. Más parancsok számot
és karakterláncot is elfogadnak; ilyen például a
p
parancs, ami mindegyiket elfogadja és a típusának
megfelelő módon írja ki.
- [karakterek]
- A karakterek -et tartalmazó karakterláncot
(azokat a karaktereket, amik [ és ] karakterek
között vannak) tartalmazó karakterláncot képez
és a veremre helyezi. Például a [foo]P kiírja a
foo szöveget és nem ír utána újsor
karaktert.
- a
- Leveszi a verem legfelső elemét. Ha ez szám,
akkor az alacsony helyiértékű bájtját
karakterré konvertálja és a verembe helyezi. Ha ez
karakterlánc, akkor ennek első karakterét helyezi vissza a
verembe.
- x
- Leveszi a verem legfelső elemét és
makróként végrehajtja. Normális esetben ez az elem egy
karakterlánc; ha szám, akkor visszahelyezi a verembe.
Például a [1p]x végrhajtja a 1p makrót,
ami egy 1 -est tesz a verembe és új sorban kiírja az
1 -et.
A makrókat leggyakrabban regiszterekben tároljuk; a
[1p]sa az
a regiszterbe tesz egy olyan makrót, ami egy
1 -est ír
ki. A
lax parancs hajtja végre ezt a makrót.
- >r
- Leveszi a verem két felső elemét,
feltételezi, hogy ezek számok, összehasonlítja
őket, és végrehajtja az r regiszterben
lévő makrót, ha az eredetileg a verem tetején
levő szám nagyobb. Az 1 2>a parancs végrehajtja
az a regiszterben tárolt makrót, míg a 2
1>a parancs nem.
- <r
- Hasonló, de akkor hajtja végre a makrót, ha
az eredetileg a verem tetején levő szám kisebb.
- =r
- Hasonló, de akkor hajtja végre a makrót, ha
a két levett elem egyenlő.
- ?
- Beolvas egy sort a terminálról és
végrehajtja. Ezzel a paranccsal lehet felhasználói bevitelt
kérni.
- q
- Kilép a makróból és az azt
hívó makróból is. Ha a legfelső szinten hajtod
végre, a q parancs kilép a dc -ből.
- Q
- Leveszi a verem legfelső elemét és ennyi
szintet lép ki a makrókból. A Q parancs soha nem
lép ki a dc -ből.
ÁLLAPOTLEKÉRDEZÉS¶
- Z
- Leveszi a verem tetején levő elemet,
megszámolja hány jegyű (ha szám) vagy hány
karakterből áll (ha karakterlánc), és ezt a
számot teszi a verembe.
- X
- Leveszi a verem tetején levő elemet,
megszámolja, hány tizedesjegye van, majd ezt a számot teszi
a verembe. Ha a levett elem karakterlánc, akkor 0 -t tesz a
verembe.
- z
- A verembe teszi a verem aktuális
mélységét; azt, hogy a z parancs
végrehajtása előtt hány elem volt a veremben.
EGYÉB¶
- !
- A sor többi részét mint rendszerparancsot
futtatja.
- #
- A sor többi részét megjegyzésként
kezeli.
- :r
- A verem két felső elemét leveszi. A
második elemet az r tömbbe helyezi, amit az első
elemmel indexel.
- ;r
- Leveszi a verem felső elemét és az r
tömb indexeként használja. A kiválasztott elem a
verembe kerül.
MEGJEGYZÉSEK¶
A
: és a
; tömbműveteket általában csak a
bc hagyományos implementációi használják. (A
GNU
bc ezt tartalmazza, nem szükséges a futásához a
dc. )
HIBÁK¶
A hibákat e-mail-ben jelentsd a
bug-gnu-utils@prep.ai.mit.edu
címen. A levél tárgyában valahol legyen benne a ``dc''
szó.
MAGYAR FORDÍTÁS¶
Tevesz Tamás <ice@rulez.org>