Bc (programovací jazyk) - Bc (programming language)
![]() | Tento článek obsahuje seznam obecných Reference, ale zůstává z velké části neověřený, protože postrádá dostatečné odpovídající vložené citace.červen 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Vývojáři | Robert Morris a Lorinda Cherry z Bell Labs, Philip A. Nelson |
---|---|
První vydání | 1975, před 44–45 lety |
Operační systém | Unix, Unixový, Plán 9, FreeDOS |
Plošina | Cross-platform |
Typ | Příkaz |
před naším letopočtem, pro základní kalkulačka (často označované jako stolní kalkulačka), je "an libovolná přesnost jazyk kalkulačky"se syntaxí podobnou Programovací jazyk C.. bc se obvykle používá buď jako matematický skriptovací jazyk, nebo jako interaktivní matematický shell.
Přehled
Typickým interaktivním využitím je psaní příkazu před naším letopočtem
na Unix příkazový řádek a zadání matematického výrazu, jako je (1 + 3) * 2
načež 8 bude výstup. Zatímco bc může pracovat s libovolnou přesností, ve skutečnosti je výchozí hodnota za nulovými číslicemi za desetinnou čárkou, takže výraz 2/3
výnosy 0. To může překvapit nové uživatele BC, kteří si tuto skutečnost neuvědomují. The -l
Možnost bc nastaví výchozí měřítko (číslice za desetinnou čárkou) na 20 a přidá do jazyka několik dalších matematických funkcí.
Dějiny
bc se poprvé objevil v Verze 6 Unix v roce 1975 a napsal ji Robert Morris a Lorinda Cherry z Bell Labs. bc předcházela DC, dřívější kalkulačka s libovolnou přesností napsaná stejnými autory. dc mohl dělat výpočty s libovolnou přesností, ale jeho obrácenou polskou notaci Syntaxe (RPN) - kterou mnozí velmi oblíbili pro hodnocení algebraických vzorců - se pro její uživatele při vyjadřování řízení toku ukázala jako nepohodlná, a proto byl bc zapsán jako front-end do dc. bc bylo velmi jednoduché překladač (jediný yacc zdrojový soubor s několika stovkami řádků), který převedl novou syntaxi typu C, bc na dc postfixová notace a výsledky pipetoval přes dc.
V roce 1991 POSIX přísně definované a standardizované BC Dnes přežívají tři implementace tohoto standardu: První je tradiční implementace Unix, front-end k dc, která přežívá v Unixu a Plán 9 systémy. Druhým je svobodný software GNU před naším letopočtem, poprvé vydána v roce 1991 Philipem A. Nelsonem. Implementace GNU má řadu rozšíření nad rámec standardu POSIX a již není frontendem dc (je to překladač bytecode ). Třetí je re-implementace OpenBSD v roce 2003.
Implementace
POSIX bc
Standardizovaný jazyk bc POSIX je tradičně psán jako program v DC programovací jazyk, který poskytuje vyšší úroveň přístupu k funkcím stejnosměrného jazyka bez složitosti přísné syntaxe stejnosměrného proudu.
V této podobě jazyk bc obsahuje jedno písmeno proměnná, pole a funkce jména a většina standardních aritmetických operátorů, stejně jako známé regulační tok konstrukty (li(kond)...
, zatímco(kond)...
a pro(inic;kond;vč)...
) od C. Na rozdíl od C, an -li
za klauzulí nesmí následovat jiný
.
Funkce jsou definovány pomocí a definovat
klíčové slovo a hodnoty jsou z nich vráceny pomocí a vrátit se
následuje návratová hodnota v závorkách. The auto
klíčové slovo (volitelné v C) se používá k deklaraci proměnné jako místní funkce.
Všechna čísla a variabilní obsah jsou libovolná přesnost čísla, jejichž přesnost (na desetinná místa) je určena globálem měřítko
proměnná.
The číselná základna vstupních (v interaktivním režimu), výstupních a programových konstant lze určit nastavením rezervy ibase
(vstupní základna) a obase
(výstupní báze) proměnné.
Výstup je generován záměrným nepřiřazením výsledku výpočtu k proměnné.
K kódu bc lze přidávat komentáře pomocí C. /*
a */
(začátek a konec komentáře) symboly.
Matematické operátory
Přesně jako C.
Následující POSIX bc operátory chovat se přesně jako jejich protějšky C:
+ - * /+= -= *= /=++ -- < >== != <= >=( ) [ ] { }
Podobně jako u C.
The modul operátoři, %
a %=
chovat se přesně jako jejich protějšky C, pouze když jsou globální měřítko
proměnná je nastavena na 0, tj. všechny výpočty jsou pouze celé číslo. Jinak se výpočet provádí s příslušnou stupnicí. a% b
je definován jako a- (a / b) * b
. Příklady:
$ před naším letopočtempř. 1,06Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.Toto je bezplatný software s ABSOLUTNĚ ŽÁDNOU ZÁRUKOU.Pro podrobnosti zadejte `záruka '.scale = 0; 5% 32scale = 1; 5% 3.2scale = 20; 5% 3.00000000000000000002
Konflikt s C.
Provozovatelé
^ ^=
povrchně připomíná C bitově exclusive-or operátory, ale ve skutečnosti jsou bc celočíselnými operátory umocňování.
Za zmínku stojí zejména použití ^
operátor se zápornými čísly nenásleduje přednost operátoru C. -2^2
dává odpověď 4 pod bc spíše než −4.
„Chybějící“ operátoři ve vztahu k C.
The bitový, booleovský a podmiňovací způsob operátoři:
& | ^ && ||&= |= ^= &&= ||=<< >><<= >>=?:
nejsou k dispozici v POSIX bc.
Integrované funkce
The sqrt ()
funkce pro výpočet odmocniny je jedinou vestavěnou matematickou funkcí POSIX bc. Další funkce jsou k dispozici v externí standardní knihovně.
The měřítko()
funkce pro stanovení přesnosti (jako u měřítko
proměnná) jejího argumentu a délka()
jsou také zabudovány funkce pro určení počtu platných desetinných míst v argumentu.
Standardní funkce knihovny
bc standardní matematická knihovna (definovaná pomocí -l možnost) obsahuje funkce pro výpočet sinus, kosinus, arkustangens, přirozený logaritmus, exponenciální funkce a dva parametry Besselova funkce J. Většinu standardních matematických funkcí (včetně ostatních inverzních trigonometrických funkcí) lze zkonstruovat pomocí nich. Viz externí odkazy pro implementaci mnoha dalších funkcí.
bc příkaz | Funkce | Popis |
---|---|---|
s (x) | Sinus | Bere X, úhel dovnitř radiány |
c (x) | Kosinus | Bere X, úhel v radiánech |
sekera) | Arkustangens | Vrací radiány |
l (x) | Přirozený logaritmus | |
e (x) | Exponenciální funkce | |
j (n, x) | Besselova funkce | Vrátí objednávku-n Besselova funkce X. |
The -l volba změní měřítko na 20,[1] takže věci jako modulo mohou fungovat nečekaně. Například psaní bc -l
a pak příkaz tisk 3% 2
výstupy 0. Ale psaní scale = 0
po bc -l
a pak příkaz tisk 3% 2
bude výstup 1.
Plán 9 př
Plán 9 bc je totožný s POSIX bc, ale za další tisk
prohlášení.
GNU př
GNU bc pochází ze standardu POSIX a obsahuje mnoho vylepšení. Je zcela odděleno od implementací standardu POSIX založených na stejnosměrném proudu a místo toho je napsáno v jazyce C. Přesto je plně zpětně kompatibilní, protože všechny programy POSIX bc poběží beze změny jako programy GNU bc.
GNU bc proměnné, pole a názvy funkcí mohou obsahovat více než jeden znak, některé další operátory byly zahrnuty z C, a zejména -li
za klauzulí může následovat jiný
.
Výstupu je dosaženo buď záměrným nepřiřazením výsledku výpočtu proměnné (způsob POSIX), nebo použitím přidaného tisk
prohlášení.
Dále, a číst
příkaz umožňuje interaktivní zadání čísla do běžícího výpočtu.
Kromě komentářů ve stylu C a #
znak způsobí, že bude vše po něm ignorováno, dokud nebude ignorován další nový řádek.
Hodnota posledního výpočtu je vždy uložena v rámci dodatečného integrovaného poslední
proměnná.
Extra operátoři
Následující logické operátory jsou navíc k těm v POSIX bc:
&& || !
Jsou k dispozici pro použití v podmíněných příkazech (například v rámci -li
prohlášení). Všimněte si však, že stále neexistují žádné ekvivalentní bitové operace nebo operace přiřazení.
Funkce
Všechny funkce dostupné v GNU bc jsou zděděny z POSIXu. Standardně nejsou s distribucí GNU poskytovány žádné další funkce.
Příklad kódu
Vzhledem k tomu, BC ^
operátor umožňuje pouze celočíselný výkon napravo, jednou z prvních funkcí, které uživatel bc může napsat, je výkonová funkce s exponentem s plovoucí desetinnou čárkou. Oba níže předpokládají, že byla zahrnuta standardní knihovna:
Funkce „power“ v POSIX bc
/ * Funkce pro vrácení celočíselné části x * / definovat i(X) { auto s s = měřítko měřítko = 0 X /= 1 / * zaokrouhlit x dolů * / měřítko = s vrátit se (X) } / * Použijte skutečnost, že x ^ y == e ^ (y * log (x)) * / definovat str(X,y) { -li (y == i(y)) { vrátit se (X ^ y) } vrátit se ( E( y * l(X) ) ) }
Výpočet π na 10 000 číslic
Vypočítat pi pomocí vestavěného arkustangens funkce, A():
$ bc -lqscale = 10 0004 * a (1) # Atan 1 je 45 stupňů, což je pi / 4 v radiánech. # Výpočet může trvat několik minut.
Přeložená funkce C.
Protože syntaxe bc je podobná syntaxi C, publikované číselné funkce napsané v C lze často snadno přeložit do bc, což okamžitě poskytuje libovolnou přesnost bc. Například v Žurnál statistického softwaru (Červenec 2004, svazek 11, vydání 5), George Marsaglia zveřejnil následující kód C pro kumulativní normální rozdělení:
dvojnásobek Phi(dvojnásobek X){ dlouho dvojnásobek s=X,t=0,b=X,q=X*X,i=1; zatímco(s!=t) s=(t=s)+(b*=q/(i+=2)); vrátit se .5+s*exp(-.5*q-.91893853320467274178L);}
S některými nezbytnými změnami pro přizpůsobení rozdílné syntaxi bc a uvědomením si, že konstanta "0.9189 ..." je ve skutečnosti log (2 * PI) / 2, lze to přeložit do následujícího kódu GNU bc:
definovat phi(X) { auto s,t,b,q,i,const s=X; t=0; b=X; q=X*X; i=1 zatímco(s!=t) s=(t=s)+(b*=q/(i+=2)) konst=0.5*l(8*A(1)) # 0.91893... vrátit se .5+s*E(-.5*q-konst)}
Používání bc ve skriptech prostředí
bc lze použít neinteraktivně se vstupem prostřednictvím a trubka. To je užitečné uvnitř shell skripty. Například:
$ výsledek=$(echo „scale = 2; 5 * 7/3;“ | před naším letopočtem)$ echo $ výsledek11.66
Naproti tomu si všimněte, že bash shell provádí pouze celočíselnou aritmetiku, např .:
$ výsledek=$((5 * 7 /3))$ echo $ výsledek11
Lze také použít zde-řetězec idiom (v bash, ksh, csh):
$ bc -l <<< "5*7/3"11.66666666666666666666
Viz také
Reference
- ^ A b Nelson, Philip A. (20. března 2001). "Příkazová příručka BC". Free Software Foundation. Citováno 2017-04-20.
- Specifikace Single UNIX, Vydání 7 od Otevřená skupina : aritmetický jazyk s libovolnou přesností - reference k příkazům a nástrojům,
- Ruční stránka GNU bc
- Ruční stránka POSIX bc
- Plán 9 Programátorská příručka, svazek 1 –
- Ruční stránka Unixu bc 7. vydání
- Článek comp.compilers o designu a implementaci C-bc
- 6. vydání Unix bc zdrojový kód, první vydání bc, od května 1975, kompilace bc syntaxe do syntaxe dc
- bc zdrojový kód
externí odkazy
- Dittmer, I. 1993. Chyba v Unixových příkazech dc a bc pro aritmetiku s větší přesností. SIGNUM Newsl. 28, 2 (duben 1993), 8–11.
- Sbírka užitečných funkcí GNU bc
- GNU př (a alfa verze ) od Free Software Foundation
- bc pro Windows z GnuWin32
- X-bc - Grafické uživatelské rozhraní k bc
- extensions.bc - obsahuje funkce trigonometrie, exponenciální funkce, funkce teorie čísel a některé matematické konstanty
- science_constants.bc - obsahuje hmotnosti částic, základní konstanty, jako je rychlost světla ve vakuu a gravitační konstanta