BC (programlama dili) - Bc (programming language)

M.Ö
Geliştirici (ler)Robert Morris ve Lorinda Kiraz nın-nin Bell Laboratuvarları, Philip A. Nelson
İlk sürüm1975, 44–45 yıl önce
İşletim sistemiUnix, Unix benzeri, Plan 9, FreeDOS
PlatformÇapraz platform
TürKomut

M.Ö, için temel hesap makinesi (genellikle şöyle anılır tezgah hesaplayıcı), dır-dir "bir keyfi hassasiyet hesap makinesi dili"ile benzer sözdizimi ile C programlama dili. bc, genellikle ya matematiksel bir betik dili ya da etkileşimli bir matematiksel kabuk olarak kullanılır.

Genel Bakış

Tipik bir etkileşimli kullanım, komutu yazmaktır M.Ö bir Unix Komut istemi ve bir matematiksel ifade girme, örneğin (1 + 3) * 2bunun üzerine 8 çıktı olacaktır. Bc keyfi bir hassasiyetle çalışabilirken, aslında ondalık noktadan sonra varsayılan olarak sıfır basamağa sahiptir, dolayısıyla ifade 2/3 verim 0. Bu, bu gerçeğin farkında olmayan yeni BC kullanıcılarını şaşırtabilir. -l bc seçeneği varsayılanı ayarlar ölçek (ondalık noktadan sonraki rakamlar) 20'ye ve dile birkaç ek matematiksel işlev ekler.

Tarih

bc ilk olarak şurada ortaya çıktı Sürüm 6 Unix 1975'te yazılmıştır ve Robert Morris ve Lorinda Kiraz nın-nin Bell Laboratuvarları. bc'den önce dc, aynı yazarlar tarafından yazılmış daha önceki bir keyfi hassasiyetli hesap makinesi. dc keyfi kesinlikte hesaplamalar yapabilir, ancak ters Lehçe notasyonu (RPN) sözdizimi - çoğu kişi tarafından cebirsel formülleri değerlendirmek için çok sevilir - akış kontrolünü ifade ederken kullanıcılarına uygunsuz olduğunu kanıtladı ve bu nedenle bc, dc için bir ön uç olarak yazılmıştır. bc çok basitti derleyici (Bir tek yacc yeni, C benzeri bc sözdizimini dc'lere dönüştüren birkaç yüz satırlık kaynak dosyası) sonek gösterimi ve sonuçları dc aracılığıyla aktarıldı.

1991 yılında POSIX titizlikle tanımlanmış ve standartlaştırılmış bc. Bu standardın üç uygulaması bugün hayatta kalmaktadır: Birincisi, geleneksel Unix uygulamasıdır, DC için bir ön uç, Unix'te ve Plan 9 sistemleri. İkincisi ücretsiz yazılım GNU bc, ilk olarak 1991'de Philip A. Nelson tarafından piyasaya sürüldü. GNU uygulaması, POSIX standardının ötesinde çok sayıda uzantıya sahiptir ve artık dc için bir ön uç değildir (bu bir bayt kodu yorumlayıcı ). Üçüncüsü, 2003 yılında OpenBSD tarafından yeniden uygulanmasıdır.

Uygulamalar

POSIX bc

POSIX standardize edilmiş bc dili, geleneksel olarak bir program olarak yazılır. dc dc'nin kısa sözdiziminin karmaşıklıkları olmadan dc dilinin özelliklerine daha yüksek düzeyde erişim sağlamak için programlama dili.

Bu formda, bc dili tek harf içerir değişken, dizi ve işlevi isimler ve çoğu standart aritmetik operatörler ile tanıdık kontrol akışı yapılar (Eğer(koşul)..., süre(koşul)... ve için(içinde;koşul;inc)...) C.'den farklı olarak, bir Eğer cümlesinin ardından bir Başka.

Fonksiyonlar, bir tanımlamak anahtar kelime ve değerler bir dönüş ve ardından parantez içindeki dönüş değeri. Oto anahtar sözcük (C'de isteğe bağlı), bir değişkeni bir işleve yerel olarak bildirmek için kullanılır.

Tüm sayılar ve değişken içerikler keyfi hassasiyet kesinliği (ondalık basamaklarda) global tarafından belirlenen sayılar ölçek değişken.

sayısal taban giriş (etkileşimli modda), çıktı ve program sabitleri, ayrılmış ibase (giriş tabanı) ve obase (çıktı tabanı) değişkenler.

Çıktı, bir hesaplamanın sonucunun kasıtlı olarak bir değişkene atanmaması ile oluşturulur.

C kullanılarak bc koduna yorumlar eklenebilir /* ve */ (açıklama başlangıcı ve sonu) sembolleri.

Matematiksel operatörler

Tam olarak C

Aşağıdaki POSIX bc operatörler tam olarak C meslektaşları gibi davranırlar:

+     -     *     /+=    -=    *=    /=++    --    <     >==    !=    <=    >=( )   [ ]   { }
C benzer

modül operatörler, % ve %= tam olarak C meslektaşları gibi davranırlar, yalnızca küresel ölçek değişken 0 olarak ayarlanmıştır, yani tüm hesaplamalar yalnızca tamsayıdır. Aksi takdirde uygun ölçekle hesaplama yapılır. a% b olarak tanımlanır a- (a / b) * b. Örnekler:

$ M.ÖMÖ 1.06Telif Hakkı 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.Bu, KESİNLİKLE HİÇBİR GARANTİ içermeyen ücretsiz bir yazılımdır.Ayrıntılar için garanti yazın.ölçek = 0; % 5 32ölçek = 1; % 5 3.2ölçek = 20; % 5 3.00000000000000000002
C ile çelişen

Operatörler

^     ^=

yüzeysel olarak C bitsel olarak benzer özel veya operatörler, ancak aslında bc tamsayı üs alma operatörleridir.

Özellikle not olarak, ^ negatif sayılara sahip işleç, C işlecinin önceliğini izlemez. -2^2 bc'nin b4 yerine 4'ün cevabını verir.

C'ye göre "Eksik" operatörler

bitsel, Boole ve şartlı operatörler:

&     |     ^     &&    ||&=    |=    ^=    &&=   ||=<<    >><<=   >>=?:

POSIX bc'de mevcut değildir.

Yerleşik işlevler

sqrt () hesaplama işlevi Karekök POSIX bc'nin tek yerleşik matematiksel işlevidir. Diğer işlevler harici bir standart kitaplıkta mevcuttur.

ölçek () kesinliği belirleme işlevi (olduğu gibi ölçek değişkeni) argümanını ve uzunluk () Bağımsız değişkenindeki önemli ondalık basamakların sayısını belirlemek için işlev de yerleşiktir.

Standart kitaplık işlevleri

bc'nin standart matematik kitaplığı ( -l seçenek) hesaplama işlevlerini içerir sinüs, kosinüs, arktanjant, doğal logaritma, üstel fonksiyon ve iki parametre Bessel işlevi J. Çoğu standart matematiksel fonksiyon (diğer ters trigonometrik fonksiyonlar dahil) bunlar kullanılarak oluşturulabilir. Diğer birçok işlevin uygulamaları için harici bağlantılara bakın.

Bc standart kitaplığı[1]
bc komutuFonksiyonAçıklama
s (x)SinüsAlır x, bir açı radyan
c (x)KosinüsAlır x, radyan cinsinden bir açı
a (x)ArktanjantRadyan verir
l (x)Doğal logaritma
e (x)Üstel fonksiyon
j (n, x)Bessel işleviSiparişi verir-n Bessel işlevi x.

-l seçenek ölçeği 20 olarak değiştirir,[1] bu nedenle modulo gibi şeyler beklenmedik şekilde çalışabilir. Örneğin, yazmak bc -l ve sonra komut baskı% 3 2 0 çıktı verir. Ama yazıyor scale = 0 sonra bc -l ve sonra komut baskı% 3 2 çıktı 1.

MÖ 9 planı

Plan 9 bc, POSIX bc ile aynıdır, ancak ek olarak Yazdır Beyan.

GNU bc

GNU bc, POSIX standardından türemiştir ve birçok geliştirme içerir. POSIX standardının dc tabanlı uygulamalarından tamamen ayrıdır ve bunun yerine C'de yazılmıştır. Yine de, tüm POSIX bc programları değiştirilmeden GNU bc programları olarak çalışacağından geriye dönük olarak tamamen uyumludur.

GNU bc değişkenleri, dizileri ve işlev adları birden fazla karakter içerebilir, C'den bazı daha fazla işleç dahil edilmiştir ve özellikle bir Eğer cümlenin ardından bir Başka.

Çıktı, kasıtlı olarak bir hesaplamanın sonucunu bir değişkene (POSIX yolu) atamadan veya eklenen Yazdır Beyan.

Ayrıca, bir okumak ifadesi, bir sayının çalışan bir hesaplamaya etkileşimli girişine izin verir.

C tarzı yorumlara ek olarak, bir # karakteri, bir sonraki yeni satıra kadar her şeyin yok sayılmasına neden olur.

Son hesaplamanın değeri her zaman ek yerleşik son değişken.

Ekstra operatörler

Aşağıdaki mantıksal operatörler POSIX bc'dekilere ek olarak:

&&     ||      !

Koşullu ifadelerde kullanım için mevcutturlar (örneğin bir Eğer Beyan). Bununla birlikte, hala eşdeğer bitsel veya atama işlemlerinin olmadığını unutmayın.

Fonksiyonlar

GNU bc'de bulunan tüm işlevler POSIX'ten miras alınır. GNU dağıtımında standart olarak başka işlevler sağlanmaz.

Örnek kod

M.Ö.'den beri ^ işleci sadece sağında bir tamsayı kuvvetine izin verir, bir bc kullanıcısının yazabileceği ilk işlevlerden biri kayan noktalı üslü bir güç işlevidir. Aşağıdakilerin her ikisi de standart kitaplığın dahil edildiğini varsayar:

POSIX bc'de bir "güç" işlevi

 / * X'in tamsayı kısmını döndüren bir işlev * / tanımlamak ben(x) {    Oto s s = ölçek    ölçek = 0    x /= 1   / * x aşağı yuvarla * /    ölçek = s dönüş (x) } / * X ^ y == e ^ (y * log (x)) * / tanımlamak p(x,y) {    Eğer (y == ben(y)) {       dönüş (x ^ y)    }    dönüş ( e( y * l(x) ) ) }

Π ila 10000 basamak hesaplanıyor

Hesaplamak pi yerleşik kullanarak arktanjant fonksiyon a ():

$ bc -lqölçek = 100004 * a (1) # 1'in atanı 45 derecedir, bu da radyan cinsinden pi / 4'tür.       # Bunun hesaplanması birkaç dakika sürebilir.

Çevrilmiş bir C işlevi

Çünkü bc'nin sözdizimi, C, C ile yazılan yayınlanmış sayısal işlevler genellikle kolayca bc'ye çevrilebilir, bu da hemen bc'nin keyfi kesinliğini sağlar. Örneğin, İstatistik Yazılım Dergisi (Temmuz 2004, Cilt 11, Sayı 5), George Marsaglia için aşağıdaki C kodunu yayınladı kümülatif normal dağılım:

çift Phi(çift x){    uzun çift s=x,t=0,b=x,q=x*x,ben=1;    süre(s!=t)        s=(t=s)+(b*=q/(ben+=2));    dönüş .5+s*tecrübe(-.5*q-.91893853320467274178L);}

Bc'nin farklı sözdizimini barındırmak için gerekli bazı değişikliklerle ve "0.9189 ..." sabitinin aslında log (2 * PI) / 2 olduğunun farkına varıldığında, bu aşağıdaki GNU bc koduna çevrilebilir:

tanımlamak phi(x) {    Oto s,t,b,q,ben,sabitler=x; t=0; b=x; q=x*x; ben=1    süre(s!=t)        s=(t=s)+(b*=q/(ben+=2))    sabit=0.5*l(8*a(1))   # 0.91893...    dönüş .5+s*e(-.5*q-sabit)}

Bc'yi kabuk betiklerinde kullanma

bc, etkileşimli olmayan bir şekilde kullanılabilir. boru. Bu içeride kullanışlıdır kabuk komut dosyaları. Örneğin:

$ sonuç=$(Eko "ölçek = 2; 5 * 7/3;" | M.Ö)$ Eko $ sonuç11.66

Bunun aksine, unutmayın ki bash kabuğu yalnızca tamsayı aritmetiği gerçekleştirir, örneğin:

$ sonuç=$((5 * 7 /3))$ Eko $ sonuç11

Bir de kullanabilirsiniz here-string deyim (bash, ksh, csh içinde):

$ bc -l <<< "5*7/3"11.66666666666666666666

Ayrıca bakınız

Referanslar

  1. ^ a b Nelson, Philip A. (20 Mart 2001). "bc Komut Kılavuzu". Özgür Yazılım Vakfı. Alındı 2017-04-20.

Dış bağlantılar