İsim dc - keyfi duyarlıklı ondalık ters Lehçe gösterimli (RNP) hesap makinesi
Sözdizimi
dc [-cChiPRvVx] [--version] [--help] [--digit-clamp] [--no-digit-clamp] [--interactive]
[--no-prompt] [--no-read-prompt] [--extended-register] [-e expr] [--expression=expr...] [-f
file...] [--file=file...] [file...] [-I ibase] [--ibase=ibase] [-O obase] [--obase=obase] [-S
scale] [--scale=scale] [-E seed] [--seed=seed]
Açıklama
dc(1), keyfi duyarlıklı bir hesap makinesidir. Sayıları ve hesaplama sonuçlarını depolamak için bir yığın (ters Lehçe gösterimi - reverse Polish notation) kullanır. Aritmetik işlemler argümanları yığından çeker ve sonuçları yığına iter.
Komut satırında hiçbir dosya belirtilmezse, dc(1) standart girdiden (stdin) okuma yapar (STDIN bölümüne bakın). Aksi takdirde, bu dosyalar işlenir ve ardından dc(1) sonlanır.
Eğer bir kullanıcı standart bir ortam kurmak isterse, DC_ENV_ARGS değişkenini kullanabilir (ORTAM DEĞİŞKENLERİ bölümüne bakın). Örneğin, eğer bir kullanıcı basamak duyarlılığının (scale) her zaman 10 olarak ayarlanmasını istiyorsa, DC_ENV_ARGS değişkenini -e 10k olarak ayarlayabilir ve bu durumda dc(1) her zaman 10 basamak duyarlılığıyla başlar.
Seçenekler
Aşağıda dc(1) tarafından kabul edilen seçenekler yer almaktadır.
-C, --no-digit-clamp Sayılar ayrıştırılırken, mevcut ibase değerinden büyük veya ona eşit basamakların kırpılmasını (clamping) devre dışı bırakır.
Bu, bir basamağın sayıya eklediği değerin her zaman o basamağın kendi değerinin, en önemsiz basamaktan 0 ile başlayan basamak konumunun ibase üssü ile çarpılmasıyla elde edilen değer olacağı anlamına gelir.
Eğer bu seçenek ve/veya -c ya da --digit-clamp seçenekleri birden fazla kez verilirse, en son verilen seçenek geçerli olur.
Bu seçenek, DC_DIGIT_CLAMP ortam değişkenini (ORTAM DEĞİŞKENLERİ bölümüne bakın) ve varsayılan ayarı (bu ayar -h veya --help seçenekleriyle sorgulanabilir) geçersiz kılar.
Bu, taşınabilir olmayan bir uzantıdır.
-c, --digit-clamp Sayılar ayrıştırılırken, mevcut ibase değerinden büyük veya ona eşit basamakların kırpılmasını (clamping) etkinleştirir.
Bu, ibase değerinden büyük veya ona eşit olan bir basamaktan sayıya eklenen değerin, ibase değerinin 1 eksiğinin, en önemsiz basamaktan 0 ile başlayan basamak konumunun ibase üssü ile çarpılmasıyla elde edilen değer olacağı anlamına gelir.
Eğer bu seçenek ve/veya -C ya da --no-digit-clamp seçenekleri birden fazla kez verilirse, en son verilen seçenek geçerli olur.
Bu seçenek, DC_DIGIT_CLAMP ortam değişkenini (ORTAM DEĞİŞKENLERİ bölümüne bakın) ve varsayılan ayarı (bu ayar -h veya --help seçenekleriyle sorgulanabilir) geçersiz kılar.
Bu, taşınabilir olmayan bir uzantıdır.
-E seed, --seed=seed seed değerinin 10'luk tabanda olduğu varsayılarak, yerleşik seed değişkenini belirtilen seed değerine ayarlar. seed geçerli bir sayı değilse bu ölümcül bir hatadır.
Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-e expr, --expression=expr expr ifadesini değerlendirir. Birden fazla ifade verilirse, sırayla değerlendirilirler. Dosyalar da verilmişse (aşağıya bakın), ifadeler ve dosyalar veriliş sırasına göre değerlendirilir. Bu, bir dosyanın bir ifadeden önce verilmesi durumunda dosyanın önce okunup değerlendirileceği anlamına gelir.
Eğer bu seçenek komut satırında verilmişse (yani ORTAM DEĞİŞKENLERİ bölümünde açıklanan DC_ENV_ARGS içinde değilse), tüm ifadeler ve dosyalar işlendikten sonra dc(1) sonlanır; ancak komut satırında veya DC_ENV_ARGS içinde -f veya --file seçeneğine en az bir kez - (stdin) argümanı verilmişse bu durum istisnadır. Bununla birlikte, -f- veya eşdeğeri verildikten sonra başka herhangi bir -e, --expression, -f veya --file argümanı verilirse, dc(1) ölümcül bir hata verip sonlanacaktır.
Bu, taşınabilir olmayan bir uzantıdır.
-f file, --file=file file dosyasını okur ve sanki stdin üzerinden okunmuş gibi satır satır değerlendirir. İfadeler de verilmişse (yukarıya bakın), ifadeler veriliş sırasına göre değerlendirilir.
Eğer bu seçenek komut satırında verilmişse (yani ORTAM DEĞİŞKENLERİ bölümünde açıklanan DC_ENV_ARGS içinde değilse), tüm ifadeler ve dosyalar işlendikten sonra dc(1) sonlanır; ancak -f veya --file seçeneğine en az bir kez - (stdin) argümanı verilmişse bu durum istisnadır. Bununla birlikte, -f- veya eşdeğeri verildikten sonra başka herhangi bir -e, --expression, -f veya --file argümanı verilirse, dc(1) ölümcül bir hata verip sonlanacaktır.
Bu, taşınabilir olmayan bir uzantıdır.
-h, --help Bir kullanım mesajı yazdırır ve çıkış yapar.
-I ibase, --ibase=ibase ibase değerinin 10'luk tabanda olduğu varsayılarak, yerleşik ibase değişkenini belirtilen ibase değerine ayarlar. ibase geçerli bir sayı değilse bu ölümcül bir hatadır.
Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-i, --interactive Etkileşimli modu zorunlu kılar. (ETKİLEŞİMLİ MOD bölümüne bakın.)
Bu, taşınabilir olmayan bir uzantıdır.
-L, --no-line-length Satır uzunluğu kontrolünü devre dışı bırakır ve sayıları ters eğik çizgiler (backslash) ve yeni satırlar (newline) olmadan yazdırır. Diğer bir deyişle, bu seçenek BC_LINE_LENGTH değerini 0 olarak ayarlar (ORTAM DEĞİŞKENLERİ bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
-O obase, --obase=obase obase değerinin 10'luk tabanda olduğu varsayılarak, yerleşik obase değişkenini belirtilen obase değerine ayarlar. obase geçerli bir sayı değilse bu ölümcül bir hatadır.
Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-P, --no-prompt TTY modunda istemi (prompt) devre dışı bırakır. (İstem yalnızca TTY modunda etkindir. TTY MODU bölümüne bakın.) Bu seçenek çoğunlukla istem istemeyen veya dc(1) içinde buna alışkın olmayan kullanıcılar içindir. Bu kullanıcıların çoğu bu seçeneği DC_ENV_ARGS değişkenine eklemek isteyecektir.
Bu seçenekler DC_PROMPT ve DC_TTY_MODE ortam değişkenlerini geçersiz kılar (ORTAM DEĞİŞKENLERİ bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
-R, --no-read-prompt TTY modunda okuma istemini (read prompt) devre dışı bırakır. (Okuma istemi yalnızca TTY modunda etkindir. TTY MODU bölümüne bakın.) Bu seçenek çoğunlukla bir okuma istemi istemeyen veya dc(1) içinde buna alışkın olmayan kullanıcılar içindir. Bu kullanıcıların çoğu bu seçeneği BC_ENV_ARGS değişkenine eklemek isteyecektir (ORTAM DEĞİŞKENLERİ bölümüne bakın). Bu seçenek ayrıca kullanıcı girdisi isteyen dc(1) betiklerinin shebang (hash bang) satırlarında da yararlıdır.
Bu seçenek normal istemi devre dışı bırakmaz çünkü okuma istemi yalnızca ? komutu kullanıldığında kullanılır.
Bu seçenekler DC_PROMPT ve DC_TTY_MODE ortam değişkenlerini geçersiz kılar (ORTAM DEĞİŞKENLERİ bölümüne bakın), ancak bunu yalnızca okuma istemi için yapar.
Bu, taşınabilir olmayan bir uzantıdır.
-S scale, --scale=scale scale değerinin 10'luk tabanda olduğu varsayılarak, yerleşik scale değişkenini belirtilen scale değerine ayarlar. scale geçerli bir sayı değilse bu ölümcül bir hatadır.
Bu seçeneğin birden fazla örneği verilirse, en sonuncusu kullanılır.
Bu, taşınabilir olmayan bir uzantıdır.
-v, -V, --version Sürüm bilgilerini (telif hakkı başlığı) yazdırır ve çıkış yapar.
-x --extended-register Genişletilmiş kaydedici (register) modunu etkinleştirir. Daha fazla bilgi için KAYDİCİLER bölümünün Genişletilmiş Kaydedici Modu alt bölümüne bakın.
Bu, taşınabilir olmayan bir uzantıdır.
-z, --leading-zeroes dc(1) uygulamasının -1'den büyük, 1'den küçük ve 0'a eşit olmayan tüm sayıları başında sıfır olacak şekilde yazdırmasını sağlar.
Bu, taşınabilir olmayan bir uzantıdır.
Tüm uzun seçenekler taşınabilir olmayan uzantılardır.
Stdin
Komut satırında hiçbir dosya verilmemişse ve -f, --file, -e veya --expression seçenekleriyle hiçbir dosya veya ifade belirtilmemişse, dc(1) stdin'den okuma yapar.
Ancak bunun bir istisnası vardır.
İlk olarak, stdin satır satır değerlendirilir. Bunun tek istisnası, bir dizgenin bitirilmiş olması fakat sonlandırılmamış olmasıdır. Bu, kaçışlı köşeli parantezler hariç olmak üzere, dc(1) ayrıştırmadan ve çalıştırmadan önce tüm köşeli parantezlerin dengelenmiş olması gerektiği anlamına gelir.
Stdout
Hata olmayan tüm çıktılar stdout'a yazılır. Ek olarak, eğer geçmiş (GEÇMİŞ bölümüne bakın) ve istem (TTY MODU bölümüne bakın) etkinleştirilmişse, her ikisi de stdout'a gönderilir.
Not: Diğer dc(1) uygulamalarının aksine, bu dc(1) uygulaması stdout'a yazamadığı takdirde ölümcül bir hata verir (ÇIKIŞ DURUMU bölümüne bakın), bu nedenle dc >&- komutunda olduğu gibi stdout kapalıysa hata vererek sonlanır. Bu, stdout bir dosyaya yönlendirildiğinde dc(1)'in sorunları rapor edebilmesi için yapılmıştır.
Diğer dc(1) uygulamalarının davranışına bağımlı olan betikler varsa, bu betiklerin stdout'u /dev/null adresine yönlendirecek şekilde değiştirilmesi önerilir.
Stderr
Tüm hata çıktıları stderr'e yazılır.
Not: Diğer dc(1) uygulamalarının aksine, bu dc(1) uygulaması stderr'e yazamadığı takdirde ölümcül bir hata verir (ÇIKIŞ DURUMU bölümüne bakın), bu nedenle dc 2>&- komutunda olduğu gibi stderr kapalıysa hata koduyla sonlanır. Bu, stderr bir dosyaya yönlendirildiğinde dc(1)'in bir hata koduyla çıkabilmesi için yapılmıştır.
Diğer dc(1) uygulamalarının davranışına bağımlı olan betikler varsa, bu betiklerin stderr'i /dev/null adresine yönlendirecek şekilde değiştirilmesi önerilir.
Sözdizimi
Girdi kaynak kodundaki her bir öğe, yani bir sayı (SAYILAR bölümüne bakın) veya bir komut (KOMUTLAR bölümüne bakın), sırayla işlenir ve çalıştırılır. Girdi, girildiği anda hemen işlenir.
ibase, sabit sayıların nasıl yorumlanacağını belirleyen bir kaydedicidir (KAYDİCİLER bölümüne bakın). Bu, "girdi" tabanıdır, yani girdi sayılarını yorumlamak için kullanılan sayı tabanıdır. ibase başlangıçta 10'dur. ibase için izin verilen maksimum değer 16'dır. ibase için izin verilen minimum değer 2'dir. ibase için izin verilen maksimum değer, dc(1) programlarında T komutu ile sorgulanabilir.
obase, sonuçların nasıl çıktı verileceğini belirleyen bir kaydedicidir (KAYDİCİLER bölümüne bakın). Bu, "çıktı" tabanıdır, yani sayıları çıktı olarak vermek için kullanılan sayı tabanıdır. obase başlangıçta 10'dur. obase için izin verilen maksimum değer DC_BASE_MAX olup, U komutu ile sorgulanabilir. obase için izin verilen minimum değer 0'dır. obase 0 ise değerler bilimsel gösterimde, 1 ise mühendislik gösteriminde çıktı olarak verilir. Aksi takdirde, değerler belirtilen tabanda çıktı olarak verilir.
Bilimsel ve mühendislik gösterimlerinde çıktı vermek taşınabilir olmayan uzantılardır.
Bir ifadenin basamak duyarlılığı (scale), ifadenin sonucundaki ondalık noktanın sağındaki basamak sayısıdır ve scale, işlemlerin hassasiyetini belirleyen (istisnalar hariç) bir kaydedicidir (KAYDİCİLER bölümüne bakın). scale başlangıçta 0'dır. scale negatif olamaz. scale için izin verilen maksimum değer dc(1) programlarında V komutu ile sorgulanabilir.
seed, sahte rastgele sayı üreteci için geçerli çekirdek değerini içeren bir kaydedicidir. Eğer seed'in geçerli değeri sorgulanır ve saklanırsa, daha sonra seed'e atanması durumunda sahte rastgele sayı üretecinin, seed değerinin ilk sorgulanmasından sonra üretilen aynı sahte rastgele sayı dizisini üretmesi garanti edilir.
seed'e atanan birden fazla değer aynı sahte rastgele sayı dizisini üretebilir. Benzer şekilde, seed'e bir değer atandığında, hemen ardından seed'in sorgulanmasının aynı değeri döndüreceği garanti edilmez. Ek olarak, seed değeri, 0 veya 1 değeri almayan her ’ veya “ komutu çağrısından sonra değişecektir. ’ komutu tarafından döndürülen maksimum tamsayı W komutu ile sorgulanabilir.
Not: Sahte rastgele sayı üreteci tarafından ’ ve “ komutlarıyla döndürülen değerlerin kriptografik olarak güvenli OLMADIĞI garanti edilir. Bu, çekirdekli (seeded) bir sahte rastgele sayı üreteci kullanmanın bir sonucudur. Ancak, aynı çekirdek değerleriyle yeniden üretilebilir olmaları garanti edilir. Bu, dc(1)'den gelen sahte rastgele değerlerin yalnızca yeniden üretilebilir bir sahte rastgele sayı akışının ELZEM olduğu durumlarda kullanılması gerektiği anlamına gelir. Diğer durumlarda, çekirdeksiz bir sahte rastgele sayı üreteci kullanın.
Sahte rastgele sayı üreteci, seed ve tüm ilgili işlemler taşınabilir olmayan uzantılardır.
Yorumlar Yorumlar # karakterinden başlar ve bir sonraki yeni satıra kadar (yeni satır hariç) devam eder. Bu, taşınabilir olmayan bir uzantıdır.
Sayılar
Sayılar; basamaklardan, F'ye kadar olan büyük harflerden ve taban noktası için en fazla 1 noktadan oluşan dizgelerdir. Sayılar en fazla DC_NUM_MAX basamağa sahip olabilir. Büyük harfler, 9 artı alfabedeki konumlerine eşittir (yani A, 10'a veya 9+1'e eşittir).
Eğer bir basamak veya harf mevcut ibase değeriyle mantıklı değilse (yani mevcut ibase değerine eşit veya ondan büyükse), bu durumdaki davranış -c/--digit-clamp veya -C/--no-digit-clamp seçeneklerinin varlığına (SEÇENEKLER bölümüne bakın), DC_DIGIT_CLAMP ortam değişkeninin varlığına ve ayarına (ORTAM DEĞİŞKENLERİ bölümüne bakın) ya da -h/--help seçeneğiyle sorgulanabilen varsayılan ayara bağlıdır.
Eğer kırpma kapalıysa, mevcut ibase değerine eşit veya ondan büyük olan basamaklar veya harfler değiştirilmez. Bunun yerine, verilen değerleri ibase'in uygun üssü ile çarpılır ve sayıya eklenir. Bu, 3'lük bir ibase değerinde, AB sayısının 3^1A+3^0B değerine eşit olacağı anlamına gelir, bu da 3 çarpı 10 artı 11, yani 41'dir.
Eğer kırpma açıksa, mevcut ibase değerine eşit veya ondan büyük olan basamaklar veya harfler, ibase'in uygun üssü ile çarpılıp sayıya eklenmeden önce ibase içindeki en yüksek geçerli basamağın değerine ayarlanır. Bu, 3'lük bir ibase değerinde, AB sayısının 3^12+3^02 değerine eşit olacağı anlamına gelir, bu da 3 çarpı 2 artı 2, yani 8'dir.
Kırpma işleminin tek bir istisnası vardır: tek karakterli sayılar (yani tek başına A). Bu tür sayılar asla kırpılmaz ve her zaman mümkün olan en yüksek ibase değerinde alacakları değeri alırlar. Bu, tek başına A'nın her zaman ondalık 10'a ve tek başına Z'nin her zaman ondalık 35'e eşit olduğu anlamına gelir. Bu davranış bc(1) standardı tarafından zorunlu kılınmıştır (STANDARTLAR bölümüne bakın) ve mevcut ibase değerinden bağımsız olarak mevcut ibase değerini (i komutu ile) ayarlamak için kolay bir yol sağlamak amacıyla tasarlanmıştır.
Eğer kırpma açıksa ve bir karakterin kırpılmış değerine ihtiyaç duyuluyorsa, başında sıfır kullanın, yani A için 0A kullanın.
Ek olarak, dc(1) bilimsel gösterimdeki sayıları kabul eder. Bunlar <sayı>e<tamsayı> biçimindedir. Üs (e harfinden sonraki kısım) bir tamsayı olmalıdır. Bir örnek olarak 1.89237e9 sayısı, 1892370000 değerine eşittir. Negatif üslere de izin verilir, bu nedenle 4.2890e_3 sayısı 0.0042890 değerine eşittir.
UYARI: Bilimsel gösterimdeki hem sayı hem de üs mevcut ibase değerine göre yorumlanır, ancak sayı mevcut ibase değerinden bağımsız olarak yine de 10^üs ile çarpılır. Örneğin, ibase 16 ise ve dc(1)'e FFeA sayı dizgesi verilirse, sonuçtaki ondalık sayı 2550000000000 olacaktır; dc(1)'e 10e_4 sayı dizgesi verilirse sonuçtaki ondalık sayı 0.0016 olacaktır.
Girdiyi bilimsel gösterim olarak kabul etmek taşınabilir olmayan bir uzantıdır.
Komutlar
Geçerli komutlar aşağıda listelenmiştir.
Yazdırma Bu komutlar yazdırma işlemi için kullanılır.
Sayıları yazdırmak için hem bilimsel gösterimin hem de mühendislik gösteriminin kullanılabileceğini unutmayın. Bilimsel gösterim, 0o kullanılarak obase'e 0 atanmasıyla etkinleştirilir; mühendislik gösterimi ise 1o kullanılarak obase'e 1 atanmasıyla etkinleştirilir. Bunları devre dışı bırakmak için obase'e farklı bir değer atamanız yeterlidir.
Sayıları bilimsel gösterimde ve/veya mühendislik gösteriminde yazdırmak taşınabilir olmayan bir uzantıdır.
p Yığının en üstündeki değeri (sayı veya dizge) yazdırır ve ardından yeni bir satır karakteri yazdırır.
Bu komut yığını değiştirmez.
n Yığının en üstündeki değeri (sayı veya dizge) yazdırır ve yığından çıkarır.
P Yığından bir değer çıkarır.
Eğer değer bir sayı ise, kırpılır ve sonucun mutlak değeri sanki obase 256'ymış gibi yazdırılır ve her basamak 8 bitlik bir ASCII karakteri olarak yorumlanır, bu da onu bir bayt akışı haline verir.
Eğer değer bir dizge ise, sonunda yeni satır olmadan yazdırılır.
Bu, taşınabilir olmayan bir uzantıdır.
f Yığının tüm içeriğini, en yeniden en eskiye doğru sırayla, hiçbir şeyi değiştirmeden yazdırır.
Kullanıcılar yığında kaybolduklarında bu komutu kullanmalıdır.
Aritmetik Bunlar aritmetik işlemler için kullanılan komutlardır.
Yığının en üstündeki iki değer çıkarılır, toplanır ve sonuç yığına itilir. Sonucun basamak duyarlılığı (scale), her iki operanda ait maksimum scale değerine eşittir.
Yığının en üstündeki iki değer çıkarılır, çıkarılır ve sonuç yığına itilir. Sonucun basamak duyarlılığı (scale), her iki operanda ait maksimum scale değerine eşittir.
Yığının en üstündeki iki değer çıkarılır, çarpılır ve sonuç yığına itilir. a ilk ifadenin scale değeri ve b ikinci ifadenin scale değeriyse, sonucun scale değeri min(a+b,max(scale,a,b)) değerine eşittir; burada min() ve max() işlevleri bariz değerleri döndürür.
/ Yığının en üstündeki iki değer çıkarılır, bölünür ve sonuç yığına itilir. Sonucun basamak duyarlılığı, scale değerine eşittir.
Yığından çıkarılan ilk değer sıfırdan farklı olmalıdır.
% Yığının en üstündeki iki değer çıkarılır, kalan hesaplanır ve sonuç yığına itilir.
Kalan hesaplama şuna eşdeğerdir: 1) Mevcut scale değerine göre a/b hesaplanır ve 2) Adım 1'in sonucu kullanılarak max(scale+scale(b),scale(a)) basamak duyarlılığında a-(a/b)*b hesaplanır.
Yığından çıkarılan ilk değer sıfırdan farklı olmalıdır.
~ Yığının en üstündeki iki değer çıkarılır, bölünür ve kalan hesaplanır, sonuçlar (önce bölüm, sonra kalan) yığına itilir. Bu işlem, x ve y değerlerinin yalnızca bir kez değerlendirilmesi dışında, x y / x y % işlemlerine eşdeğerdir.
Yığından çıkarılan ilk değer sıfırdan farklı olmalıdır.
Bu, taşınabilir olmayan bir uzantıdır.
^ Yığının en üstündeki iki değer çıkarılır, ikincisi birincinin üssüne yükseltilir ve sonuç yığına itilir. Sonucun basamak duyarlılığı, scale değerine eşittir.
Yığından çıkarılan ilk değer bir tamsayı olmalıdır ve eğer bu değer negatifse, yığından çıkarılan ikinci değer sıfırdan farklı olmalıdır.
v Yığının en üstündeki değer çıkarılır, karekökü hesaplanır ve sonuç yığına itilir. Sonucun basamak duyarlılığı, scale değerine eşittir.
Yığından çıkarılan değer negatif olmamalıdır.
_ Bu komut bir sayıdan hemen önce gelirse (yani boşluk veya başka bir komut yoksa), o sayı negatif bir sayı olarak girilir.
Aksi takdirde, yığındaki en üstteki değer çıkarılır ve kopyalanır, kopya negatif yapılır ve yığına itilir. Bir sayı olmadan gerçekleşen bu davranış, taşınabilir olmayan bir uzantıdır.
b Yığının en üstündeki değer çıkarılır ve eğer sıfırsa, tekrar yığına itilir. Aksi takdirde, mutlak değeri yığına itilir.
Bu, taşınabilir olmayan bir uzantıdır.
| Yığının en üstündeki üç değer çıkarılır, modüler üs alma hesaplanır ve sonuç yığına itilir.
Çıkarılan ilk değer indirgeme modülü olarak kullanılır ve sıfırdan farklı bir tamsayı olmalıdır. Çıkarılan ikinci değer üs olarak kullanılır ve negatif olmayan bir tamsayı olmalıdır. Çıkarılan üçüncü değer tabandır ve bir tamsayı olmalıdır.
Bu, taşınabilir olmayan bir uzantıdır.
$ Yığının en üstündeki değer çıkarılır ve kopyalanır; kopya kırpılarak yığına itilir.
Bu, taşınabilir olmayan bir uzantıdır.
@ Yığının en üstündeki iki değer çıkarılır ve ikincisinin duyarlılığı, kırpma veya uzatma yoluyla birincisinin değerine ayarlanır.
Yığından çıkarılan ilk değer negatif olmayan bir tamsayı olmalıdır.
Bu, taşınabilir olmayan bir uzantıdır.
H Yığının en üstündeki iki değer çıkarılır ve ikincisi, birincisinin değerine göre sola kaydırılır (radiks sağa kaydırılır).
Yığından çıkarılan ilk değer negatif olmayan bir tamsayı olmalıdır.
Bu, taşınabilir olmayan bir uzantıdır.
h Yığının en üstündeki iki değer çıkarılır ve ikincisi, birincisinin değerine göre sağa kaydırılır (radiks sola kaydırılır).
Yığından çıkarılan ilk değer negatif olmayan bir tamsayı olmalıdır.
Bu, taşınabilir olmayan bir uzantıdır.
G Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer eşitlerse yığına 1, aksi takdirde 0 itilir.
Bu, taşınabilir olmayan bir uzantıdır.
N Yığının en üstündeki değer çıkarılır ve eğer 0 ise yığına 1, aksi takdirde 0 itilir.
Bu, taşınabilir olmayan bir uzantıdır.
( Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden küçükse yığına 1, aksi takdirde 0 itilir.
Bu, taşınabilir olmayan bir uzantıdır.
{ Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden küçük veya ona eşitse yığına 1, aksi takdirde 0 itilir.
Bu, taşınabilir olmayan bir uzantıdır.
) Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden büyükse yığına 1, aksi takdirde 0 itilir.
Bu, taşınabilir olmayan bir uzantıdır.
} Yığının en üstündeki iki değer çıkarılır, karşılaştırılır ve eğer ilki ikincisinden büyük veya ona eşitse yığına 1, aksi takdirde 0 itilir.
Bu, taşınabilir olmayan bir uzantıdır.
M Yığının en üstündeki iki değer çıkarılır. Eğer ikisi de sıfırdan farklıysa yığına 1 itilir. Eğer biri veya her ikisi de sıfırsa yığına 0 itilir.
Bu, bc(1) içindeki && operatörüne benzer ve bir kısa devre (short-circuit) operatörü değildir.
Bu, taşınabilir olmayan bir uzantıdır.
m Yığının en üstündeki iki değer çıkarılır. Eğer en az biri sıfırdan farklıysa yığına 1 itilir. Eğer ikisi de sıfırsa yığına 0 itilir.
Bu, bc(1) içindeki || operatörüne benzer ve bir kısa devre (short-circuit) operatörü değildir.
Bu, taşınabilir olmayan bir uzantıdır.
Sahte Rastgele Sayı Üreteci dc(1) yerleşik bir sahte rastgele sayı üretecine sahiptir. Bu komutlar sahte rastgele sayı üretecini sorgular. (Sahte rastgele sayı üretecini kontrol eden seed değeri hakkında daha fazla bilgi için Parametreler bölümüne bakın.)
Sahte rastgele sayı üretecini kriptografik olarak güvenli OLMADIĞI garanti edilir.
’ 0 ile DC_RAND_MAX (dahil) arasında bir tamsayı üretir (LİMİTLER bölümüne bakın).
Üretilen tamsayı, sahte rastgele sayı üretecinin sınırlamalarına tabi olmak kaydıyla mümkün olduğunca tarafsız (unbiased) hale getirilir.
Bu, taşınabilir olmayan bir uzantıdır.
“ Yığından çıkarılan bir değeri, üretilecek tamsayı için özel bir üst sınır olarak kullanır. Eğer sınır negatif veya tamsayı olmayan bir değerse, bir hata oluşur ve seed değişmeden kalırken dc(1) sıfırlanır (SIFIRLAMA bölümüne bakın). Eğer sınır DC_RAND_MAX değerinden büyükse, birkaç sahte rastgele tamsayı üretilip bunlar DC_RAND_MAX+1 değerinin uygun üsleriyle çarpılarak ve toplanarak yüksek sınıra uyulur. Böylece, bu komutla üretilebilecek tamsayı boyutu sınırsızdır. Bu komutun kullanılması, operant 0 veya 1 olmadığı sürece seed değerini değiştirecektir. Bu durumda, yığına 0 itilir ve seed değiştirilmez.
Üretilen tamsayı, sahte rastgele sayı üretecinin sınırlamalarına tabi olmak kaydıyla mümkün olduğunca tarafsız (unbiased) hale getirilir.
Bu, taşınabilir olmayan bir uzantıdır.
Yığın Kontrolü Bu komutlar yığını kontrol eder.
c Yığındaki tüm öğeleri kaldırır ("temizler").
d Yığının en üstündeki öğeyi kopyalar ("yineler") ve kopyayı yığına iter.
r Yığındaki en üstteki iki öğeyi yer değiştirir ("tersine çevirir").
R Yığındaki en üstteki değeri çıkarır ("kaldırır").
Kaydedici Kontrolü Bu komutlar kaydedicileri kontrol eder (KAYDİCİLER bölümüne bakın).
sr Yığının en üstündeki değeri çıkarır ve r kaydedicisine kaydeder.
lr r kaydedicisindeki değeri kopyalar ve yığına iter. Bu işlem r içeriğini değiştirmez.
Sr (Ana) yığının en üstündeki değeri çıkarır ve r kaydedicisinin yığınına iter. Kaydedicinin önceki değeri erişilemez hale gelir.
Lr r kaydedicisinin yığınının en üstündeki değeri çıkarır ve ana yığına iter. r kaydedicisinin yığınındaki önceki değer (varsa) artık lr komutuyla erişilebilir hale gelir.
Parametreler Bu komutlar ibase, obase, scale ve seed değerlerini kontrol eder. Ayrıca SÖZDİZİMİ bölümüne bakın.
i Yığının en üstündeki değeri çıkarır ve ibase değerini ayarlamak için kullanır; bu değer 2 ile 16 (dahil) arasında olmalıdır.
Yığının en üstündeki değerin herhangi bir ondalık kısmı varsa, bu kısım yoksayılır.
o Yığının en üstündeki değeri çıkarır ve obase değerini ayarlamak için kullanır; bu değer 0 ile DC_BASE_MAX (dahil) arasında olmalıdır (LİMİTLER ve SAYILAR bölümlerine bakın).
Yığının en üstündeki değerin herhangi bir ondalık kısmı varsa, bu kısım yoksayılır.
k Yığının en üstündeki değeri çıkarır ve scale değerini ayarlamak için kullanır; bu değer negatif olmamalıdır.
Yığının en üstündeki değerin herhangi bir ondalık kısmı varsa, bu kısım yoksayılır.
j Yığının en üstündeki değeri çıkarır ve seed değerini ayarlamak için kullanır. seed'in anlamı mevcut sahte rastgele sayı üretecine bağlıdır ancak yeni ana sürümler haricinde değişmeyeceği garanti edilir.
Değerin basamak duyarlılığı ve işareti önemli olabilir.
Daha önce kullanılmış bir seed değeri tekrar kullanılırsa, sahte rastgele sayı üretecinin, o seed değeri daha önce kullanıldığındaki aynı sahte rastgele sayı dizisini üretmesi garanti edilir.
J komutu kullanılırsa seed'e atanan kesin değerin geri döndürüleceği garanti edilmez. Ancak, seed farklı bir değer döndürse bile, her iki değerin de seed'e atandığında aynı sahte rastgele sayı dizisini üretmesi garanti edilir. Bu, seed'e atanan bazı değerlerin benzersiz sahte rastgele sayı dizileri üretmeyeceği anlamına gelir.
seed'e atanabilecek değerin uzunluğu (anlamlı ondalık basamak sayısı) veya basamak duyarlılığı (scale) konusunda bir sınır yoktur.
Bu, taşınabilir olmayan bir uzantıdır.
I Mevcut ibase değerini ana yığına iter.
O Mevcut obase değerini ana yığına iter.
K Mevcut scale değerini ana yığına iter.
J Mevcut seed değerini ana yığına iter.
Bu, taşınabilir olmayan bir uzantıdır.
T ibase için izin verilen maksimum değeri ana yığına iter.
Bu, taşınabilir olmayan bir uzantıdır.
U obase için izin verilen maksimum değeri ana yığına iter.
Bu, taşınabilir olmayan bir uzantıdır.
V scale için izin verilen maksimum değeri ana yığına iter.
Bu, taşınabilir olmayan bir uzantıdır.
W ’ sahte rastgele sayı üreteci komutuyla üretilebilecek maksimum (dahil) tamsayıyı iter.
Bu, taşınabilir olmayan bir uzantıdır.
Dizgeler Aşağıdaki komutlar dizgeleri kontrol eder.
dc(1) hem sayılar hem de dizgelerle çalışabilir ve kaydediciler (KAYDİCİLER bölümüne bakın) hem dizgeleri hem de sayıları tutabilir. dc(1) bir kaydedicinin içeriğinin bir dizge mi yoksa bir sayı mı olduğunu her zaman bilir.
Aritmetik işlemler sayılara ihtiyaç duyduğundan ve bir dizge verildiğinde hata yazdıracağından, diğer komutlar dizgeleri kabul eder.
Dizgeler makro olarak da çalıştırılabilir. Örneğin, eğer [1pR] dizgesi bir makro olarak çalıştırılırsa, 1pR kodu yürütülür; bu da 1'in sonunda yeni satır olacak şekilde yazdırılacağı ve ardından yığından çıkarılacağı anlamına gelir.
[characters] Karakterleri içeren bir dizge oluşturur ve bunu yığına iter.
Dizge içinde köşeli parantezler ([ ve ]) varsa dengeli olmalıdırlar. Dengelenmemiş köşeli parantezler ters eğik çizgi () karakteri kullanılarak kaçışlı hale getirilebilir.
Dizge içinde bir ters eğik çizgi karakteri varsa, arkasındaki karakter (başka bir ters eğik çizgi olsa bile) dizgeye kelimesi kelimesine yerleştirilir, ancak (ilk) ters eğik çizgi yerleştirilmez.
a Yığının en üstündeki değer çıkarılır.
Eğer bu bir sayı ise, kırpılır ve mutlak değeri alınır. Sonucun 256'ya göre modu hesaplanır. Eğer bu sonuç 0 ise boş bir dizge iter; aksi takdirde, karakterin mod sonucunun bir ASCII karakteri olarak yorumlandığı tek karakterlik bir dizge iter.
Eğer bu bir dizge ise, yeni bir dizge oluşturulur. Eğer orijinal dizge boşsa, yeni dizge de boş olur. Boş değilse, yeni dizgeyi tek karakterlik bir dizge olarak oluşturmak için orijinal dizgenin ilk karakteri kullanılır. Yeni dizge daha sonra yığına itilir.
Bu, taşınabilir olmayan bir uzantıdır.
x Yığının en üstünden bir değer çıkarır.
Eğer bu bir sayı ise, yığına geri itilir.
Eğer bu bir dizge ise, bir makro olarak çalıştırılır.
Bu davranış, ister bu komutla ister aşağıdaki koşullu çalıştırma komutlarıyla olsun, bir makro her çalıştırıldığında standarttır.
r Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden büyükse, r kaydedicisinin içeriği çalıştırılır.
Örneğin, 0 1>a ifadesi a kaydedicisinin içeriğini çalıştırır, 1 0>a ise çalıştırmaz.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
res Yukarıdaki gibidir, ancak karşılaştırma başarısız olursa s kaydedicisini çalıştırır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
!>r Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden büyük değilse (küçük veya eşitse), r kaydedicisinin içeriği çalıştırılır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
!>res Yukarıdaki gibidir, ancak karşılaştırma başarısız olursa s kaydedicisini çalıştırır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
<r Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden küçükse, r kaydedicisinin içeriği çalıştırılır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
<res Yukarıdaki gibidir, ancak karşılaştırma başarısız olursa s kaydedicisini çalıştırır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
!<r Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikincisinden küçük değilse (büyük veya eşitse), r kaydedicisinin içeriği çalıştırılır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
!<res Yukarıdaki gibidir, ancak karşılaştırma başarısız olursa s kaydedicisini çalıştırır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
=r Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikinciye eşitse, r kaydedicisinin içeriği çalıştırılır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
=res Yukarıdaki gibidir, ancak karşılaştırma başarısız olursa s kaydedicisini çalıştırır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
!=r Yığından sayı olması gereken iki değer çıkarır ve bunları karşılaştırır. Eğer ilk değer ikinciye eşit değilse, r kaydedicisinin içeriği çalıştırılır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
!=res Yukarıdaki gibidir, ancak karşılaştırma başarısız olursa s kaydedicisini çalıştırır.
Değerlerden biri veya her ikisi sayı değilse, dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın).
Bu, taşınabilir olmayan bir uzantıdır.
? stdin üzerinden bir satır okur ve çalıştırır. Bu, makroların kullanıcılardan girdi talep etmesini sağlamak içindir.
q Bir makronun yürütülmesi sırasında, bu komut o makronun yürütülmesini ve onu çalıştıran makronun yürütülmesini sonlandırır. Yürütülen hiçbir makro yoksa veya yalnızca tek bir makro yürütülüyorsa, dc(1) sonlanır.
Q Yığından negatif olmayan bir değer çıkarır ve bu değer, yürütme yığınından çıkarılacak makro yürütme düzeylerinin sayısı olarak kullanılır. Çıkarılacak düzey sayısı, yürütülen makro sayısından fazlaysa, dc(1) sonlanır.
, Yürütme yığınının derinliğini yığına iter. Yürütme yığını, dizge yürütmelerinin yığınıdır. Yığına itilen sayı, dc(1) uygulamasının Q komutuyla çıkmasını sağlamak için tam olarak gereken sayı kadardır; dolayısıyla ,Q dizisi dc(1) uygulamasının sonlanmasını sağlar.
Bu, taşınabilir olmayan bir uzantıdır.
Durum Bu komutlar yığının veya en üstteki değerin durumunu sorgular.
Z Yığından bir değer çıkarır.
Eğer bu bir sayı ise, sahip olduğu anlamlı ondalık basamak sayısını hesaplar ve sonucu iter. Ondalık basamağı olmayan 0 argümanı için 1 itecektir.
Eğer bu bir dizge ise, dizgenin sahip olduğu karakter sayısını iter.
X Yığından bir değer çıkarır.
Eğer bu bir sayı ise, değerin scale (ondalık basamak) değerini yığına iter.
Eğer bu bir dizge ise, 0 iter.
u Yığından bir değer çıkarır. Eğer değer bir sayı ise yığına 1 iter. Aksi takdirde (bir dizgeyse) 0 iter.
Bu, taşınabilir olmayan bir uzantıdır.
t Yığından bir değer çıkarır. Eğer değer bir dizge ise yığına 1 iter. Aksi takdirde (bir sayıysa) 0 iter.
Bu, taşınabilir olmayan bir uzantıdır.
z Yığının (bu komut çalıştırılmadan önceki) mevcut derinliğini yığına iter.
yr r kaydedicisinin mevcut yığın derinliğini ana yığına iter.
dc(1) başladığında her kaydedicinin derinliği 1 olduğundan (en üstteki öğede 0 değeri ile), dc(1) her kaydedicinin yığınında her zaman en az bir öğe olmasını gerektirir; aksi takdirde dc(1) bir hata verir ve sıfırlanır (SIFIRLAMA bölümüne bakın). Bu, bu komutun asla 0 itmeyeceği anlamına gelir.
Bu, taşınabilir olmayan bir uzantıdır.
Diziler Bu komutlar dizileri manipüle eder.
:r Yığının en üstündeki iki değeri çıkarır. İkinci değer, ilk değer tarafından dizinlenen r dizisinde (KAYDİCİLER bölümüne bakın) depolanacaktır.
;r Yığının en üstündeki değeri çıkarır ve bunu r dizisine bir dizin olarak kullanır. Seçilen değer daha sonra yığına itilir.
Yr r dizisinin uzunluğunu yığına iter.
Bu, taşınabilir olmayan bir uzantıdır.
Küresel Ayarlar Bu komutlar küresel ayarları alır. Bunlar, birden fazla belirli karakter gerektiren tek komutlardır ve hepsi g harfi ile başlar. g karakterinden sonra yalnızca aşağıdaki karakterlere izin verilir; başka herhangi bir karakter ayrıştırma hatasına neden olur (HATALAR bölümüne bakın).
gl DC_LINE_LENGTH (ORTAM DEĞİŞKENLERİ bölümüne bakın) tarafından ayarlanan satır uzunluğunu yığına iter.
gx Genişletilmiş kaydedici modu açıksa yığına 1, aksi takdirde 0 iter. Daha fazla bilgi için KAYDİCİLER bölümünün Genişletilmiş Kaydedici Modu alt bölümüne bakın.
gz -z veya --leading-zeroes seçenekleriyle (SEÇENEKLER bölümüne bakın) başında sıfır ayarı etkinleştirilmemişse yığına 0, aksi takdirde sıfır dışı bir değer iter.
Kaydediciler
Kaydediciler; dizgeleri, sayıları ve dizileri saklayabilen isimlerdir. (Sayı/dizge kaydedicileri dizi kaydedicileri ile çakışmaz.)
Her kaydedici aynı zamanda kendi yığınıdır, dolayısıyla mevcut kaydedici değeri kaydedici yığınının en üstündeki değerdir. Tüm kaydediciler, ilk kez başvurulduğunda yığınlarında bir değere (0) sahiptir ve bu öğeyi kaydedici yığından çıkarmaya çalışmak bir çalışma zamanı hatasıdır.
Genişletilmemiş kaydedici modunda, bir kaydedici adı, bir kaydedici adı gerektiren herhangi bir komuttan hemen sonra gelen tek karakterdir. Bunun tek istisnası yeni satır (\n') ve sol köşeli parantezdir (['); yeni satırın veya sol köşeli parantezin bir kaydedici adı olarak kullanılması bir ayrıştırma hatasıdır.
Genişletilmiş Kaydedici Modu Çoğu diğer dc(1) uygulamasının aksine, bu dc(1) uygulaması, genişletilmiş kaydedici modu etkinleştirildiğinde neredeyse sınırsız miktarda kaydedici sağlar.
Genişletilmiş kaydedici modu etkinleştirilirse (-x veya --extended-register komut satırı argümanları verilirse), bir komuttan hemen sonra bir kaydedici adı gerektiren karakter yeni satır (`\n') değil de bir boşluk (isspace() fonksiyonuna göre) olmadığı sürece normal tek karakterli kaydediciler kullanılır.
Bu durumda kaydedici adı, [a-z][a-z0-9_]* düzenli ifadesine (bc(1) tanımlayıcıları gibi) göre bulunur ve bir sonraki boşluk olmayan karakterler bu düzenli ifadeyle eşleşmezse bu bir ayrıştırma hatasıdır.
Sıfırlama
dc(1) varsayılan olmayan bir işleyiciye sahip olduğu bir hatayla veya sinyalle karşılaştığında sıfırlanır. Bu, birkaç şeyin gerçekleştiği anlamına gelir.
İlk olarak, yürütülen tüm makrolar durdurulur ve yürütme yığınından çıkarılır. Bu davranış, programlama dillerindeki istisnaların (exception) davranışına benzer. Ardından yürütme noktası, yürütülmeyi bekleyen tüm kodların (tüm makrolar döndükten sonra) atlanacağı şekilde ayarlanır.
Ancak değerler yığını temizlenmez; etkileşimli modda, kullanıcılar yığını inceleyebilir ve üzerinde işlem yapabilir.
Böylece dc(1) sıfırlandığında, yürütülmeyi bekleyen kalan kodları atlar. Ardından, etkileşimli moddaysa ve hata ölümcül bir hata değilse (ÇIKIŞ DURUMU bölümüne bakın), daha fazla girdi ister; aksi takdirde uygun dönüş koduyla çıkış yapar.
Performans
Çoğu dc(1) uygulaması, tek seferde 1 ondalık basamağın değerini hesaplamak için char türlerini kullanır, ancak bu yavaş olabilir. Bu dc(1) uygulaması ise farklı bir şey yapar.
Tek seferde 1'den fazla ondalık basamağı hesaplamak için büyük tamsayılar kullanır. DC_LONG_BIT değerinin (LİMİTLER bölümüne bakın) 64 olduğu bir ortamda derlenmişse, her tamsayı 9 ondalık basamağa sahiptir. DC_LONG_BIT değerinin 32 olduğu bir ortamda derlenmişse, her tamsayı 4 ondalık basamağa sahiptir. Bu değer (büyük tamsayı başına ondalık basamak sayısı) DC_BASE_DIGS olarak adlandırılır.
Ek olarak, bu dc(1) uygulaması taşma (overflow) kontrolü için daha da büyük bir tamsayı kullanır. Bu tamsayı türü DC_LONG_BIT değerine bağlıdır, ancak basamakları saklamak için kullanılan tamsayı türünün her zaman en az iki katı büyüklüktedir.
Limitler
Aşağıdakiler dc(1) üzerindeki limitlerdir:
DC_LONG_BIT dc(1) uygulamasının derlendiği ortamdaki long türünün bit sayısı. Bu, tek bir büyük tamsayıda kaç ondalık basamağın saklanabileceğini belirler (PERFORMANS bölümüne bakın).
DC_BASE_DIGS Büyük tamsayı başına ondalık basamak sayısı (PERFORMANS bölümüne bakın). DC_LONG_BIT değerine bağlıdır.
DC_BASE_POW Her bir büyük tamsayının saklayabileceği maksimum ondalık sayı (bakınız DC_BASE_DIGS) artı 1. DC_BASE_DIGS değerine bağlıdır.
DC_OVERFLOW_MAX Taşma türünün (PERFORMANS bölümüne bakın) tutabileceği maksimum sayı. DC_LONG_BIT değerine bağlıdır.
DC_BASE_MAX Maksimum çıktı tabanı. DC_BASE_POW değerine ayarlanmıştır.
DC_DIM_MAX Dizilerin maksimum boyutu. SIZE_MAX-1 değerine ayarlanmıştır.
DC_SCALE_MAX Maksimum basamak duyarlılığı. DC_OVERFLOW_MAX-1 değerine ayarlanmıştır.
DC_STRING_MAX Dizgelerin maksimum uzunluğu. DC_OVERFLOW_MAX-1 değerine ayarlanmıştır.
DC_NAME_MAX Tanımlayıcıların maksimum uzunluğu. DC_OVERFLOW_MAX-1 değerine ayarlanmıştır.
DC_NUM_MAX Ondalık noktadan sonraki basamaklar da dahil olmak üzere bir sayının maksimum uzunluğu (ondalık basamak olarak). DC_OVERFLOW_MAX-1 değerine ayarlanmıştır.
DC_RAND_MAX dc(1) içindeki ’ komutuyla döndürülen maksimum tamsayı (dahil). 2^DC_LONG_BIT-1 değerine ayarlanmıştır.
Üs İzin verilen maksimum üs (pozitif veya negatif). DC_OVERFLOW_MAX değerine ayarlanmıştır.
Değişken Sayısı Maksimum değişken/dizi sayısı. SIZE_MAX-1 değerine ayarlanmıştır.
Bu limitlerin fiilen var olmadığı varsayılmaktadır; limitler o kadar büyüktür ki (en azından 64 bit makinelerde) bir sorun oluşturacakları hiçbir nokta olmamalıdır. Aslında, bu limitlere ulaşılmadan önce belleğin tükenmesi gerekir.
Ortam Değişkenleri
Taşınabilir olmayan uzantılar olarak, dc(1) aşağıdaki ortam değişkenlerini tanır:
DC_ENV_ARGS dc(1)'e komut satırı argümanları vermenin başka bir yoludur. Diğer tüm komut satırı argümanlarıyla aynı biçimde olmalıdırlar. Bunlar her zaman ilk önce işlenir, bu nedenle DC_ENV_ARGS içinde verilen dosyalar, komut satırında verilen argümanlardan ve dosyalardan önce işlenecektir. Bu, kullanıcıya her çağrıda kullanılacak "standart" seçenekleri ve dosyaları ayarlama yeteneği verir. Bu tür dosyaların içermesi en yararlı şey, kullanıcının dc(1) her çalıştığında isteyebileceği yararlı fonksiyonlar olacaktır. Başka bir kullanım ise scale değerini 0 dışında bir değere ayarlamak için -e seçeneğini kullanmak olabilir.
DC_ENV_ARGS değişkenini ayrıştıran kod, tırnak içine alınmış argümanları doğru şekilde işleyecektir ancak kaçış dizilerini anlamaz. Örneğin, “/home/gavin/some dc file.dc” dizgesi doğru şekilde ayrıştırılacaktır, ancak “/home/gavin/some "dc" file.dc” dizgesi ters eğik çizgileri de içerecektir.
Tırnak işareti ayrıştırması her iki tırnak türünü de (’ veya “) işleyecektir. Dolayısıyla, adında herhangi bir sayıda tek tırnak bulunan bir dosyanız varsa, dış tırnak olarak çift tırnak kullanabilirsiniz, örneğin “some `dc' file.dc” gibi; adında çift tırnak olan bir dosyanız varsa bunun tersini yapabilirsiniz. Bununla birlikte, ayrıştırmanın karmaşıklığı nedeniyle DC_ENV_ARGS içinde her iki tırnak türünü de içeren bir dosyanın işlenmesi desteklenmez, ancak bu tür dosyalar ayrıştırmanın kabuk tarafından yapıldığı komut satırında hala desteklenmektedir.
DC_LINE_LENGTH Bu ortam değişkeni mevcutsa ve 1'den büyük ve UINT16_MAX (2^16-1) değerinden küçük bir tamsayı içeriyorsa, dc(1) çıktı satırlarını ters eğik çizgi yeni satır kombinasyonu da dahil olmak üzere o uzunlukta verecektir. Varsayılan satır uzunluğu 70'tir.
Özel 0 değeri satır uzunluğu kontrolünü devre dışı bırakır ve sayıları satır uzunluğuna bakılmaksızın ve ters eğik çizgi ile yeni satır olmadan yazdırır.
DC_SIGINT_RESET dc(1) etkileşimli modda değilse (ETKİLEŞİMLİ MOD bölümüne bakın), bu ortam değişkeninin hiçbir etkisi yoktur çünkü dc(1) etkileşimli modda olmadığında SIGINT sinyali aldığında çıkar.
Ancak dc(1) etkileşimli moddayken, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değer dc(1) uygulamasının çıkmak yerine SIGINT durumunda sıfırlanmasını sağlar ve sıfır değeri dc(1) uygulamasının çıkmasını sağlar. Eğer bu ortam değişkeni mevcutsa ve bir tamsayı değilse, dc(1) SIGINT durumunda çıkacaktır.
Bu ortam değişkeni, -h veya --help seçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.
DC_TTY_MODE TTY modu mevcut değilse (TTY MODU bölümüne bakın), bu ortam değişkeninin hiçbir etkisi yoktur.
Ancak TTY modu mevcut olduğunda, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değer dc(1) uygulamasının TTY modunu kullanmasını sağlar ve sıfır değeri dc(1) uygulamasının TTY modunu kullanmamasını sağlar.
Bu ortam değişkeni, -h veya --help seçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.
DC_PROMPT TTY modu mevcut değilse (TTY MODU bölümüne bakın), bu ortam değişkeninin hiçbir etkisi yoktur.
Ancak TTY modu mevcut olduğunda, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değer dc(1) uygulamasının bir istem (prompt) kullanmasını sağlar; sıfır veya tamsayı olmayan bir değer ise dc(1) uygulamasının bir istem kullanmamasını sağlar. Eğer bu ortam değişkeni mevcut değilse ve DC_TTY_MODE mevcutsa, DC_TTY_MODE ortam değişkeninin değeri kullanılır.
Bu ortam değişkeni ve DC_TTY_MODE ortam değişkeni, -h veya --help seçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.
DC_EXPR_EXIT Komut satırında -e, --expression, -f veya --file ile herhangi bir ifade veya ifade dosyası verilmişse, bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değer dc(1) uygulamasının ifadeleri ve ifade dosyalarını çalıştırdıktan sonra çıkmasını sağlar; sıfır değeri ise dc(1) uygulamasının çıkmamasını sağlar.
Bu ortam değişkeni, -h veya --help seçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.
DC_DIGIT_CLAMP Sayılar ayrıştırılırken bu ortam değişkeni mevcutsa ve bir tamsayı içeriyorsa, sıfır dışı bir değer dc(1) uygulamasının mevcut ibase değerine eşit veya ondan büyük basamakları kırparak tüm bu basamakları ibase eksi 1'e eşit olarak kabul etmesini sağlar; sıfır değeri ise bu tür kırpmaları devre dışı bırakarak o basamakların her zaman kendi değerlerine eşit olmasını ve ibase'in üssü ile çarpılmasını sağlar.
Bu durum, bc(1) standardı uyarınca (STANDARTLAR bölümüne bakın) tek basamaklı sayılar için asla geçerli değildir.
Bu ortam değişkeni, -h veya --help seçenekleriyle sorgulanabilen varsayılan ayarı geçersiz kılar.
Çıkış Durumu
dc(1) aşağıdaki çıkış durumlarını döndürür:
0 Hata yok.
1 Bir matematik hatası oluştu. Bu, matematik hataları normal yürütme sürecinde gerçekleşeceğinden, beklenen hatalar için 1 kullanma standart uygulamasını takip eder.
Matematik hataları arasında 0'a bölme, negatif bir sayının karekökünü alma, sahte rastgele sayı üreteci için sınır olarak negatif bir sayı kullanma, negatif bir sayıyı donanım tamsayısına dönüştürmeye çalışma, bir sayıyı donanım tamsayısına dönüştürürken taşma, bir sayının boyutunu hesaplarken taşma ve tamsayı gereken yerde tamsayı olmayan bir değer kullanmaya çalışma yer alır.
Donanım tamsayısına dönüştürme; üs (^), basamak ayarı (@), sola kaydırma (H) ve sağa kaydırma (h) operatörlerinin ikinci operandı için gerçekleşir.
2 Bir ayrıştırma hatası oluştu.
Ayrıştırma hataları arasında beklenmeyen dosya sonu (EOF), geçersiz bir karakter kullanılması, bir dizgenin veya yorumun sonunun bulunamaması ve geçersiz bir yerde belirteç (token) kullanılması yer alır.
3 Bir çalışma zamanı hatası oluştu.
Çalışma zamanı hataları arasında herhangi bir küresel değişkene (ibase, obase veya scale) geçersiz bir sayı atanması, read() çağrısına hatalı bir ifade verilmesi, bir read() çağrısının içinde read() çağrılması, tür hataları (bir sayıyı yürütmeye çalışma dahil) ve yığında çok az öğe varken bir işlem yapılmaya çalışılması yer alır.
4 Ölümcül bir hata oluştu.
Ölümcül hatalar arasında bellek ayırma hataları, G/Ç (I/O) hataları, dosyaların açılamaması, yalnızca ASCII karakterleri içermeyen dosyaların kullanılmaya çalışılması (dc(1) yalnızca ASCII karakterlerini kabul eder), bir dizini dosya olarak açmaya çalışma ve geçersiz komut satırı seçenekleri verilmesi yer alır.
Çıkış durumu 4 özeldir; ölümcül bir hata oluştuğunda dc(1), hangi modda olursa olsun her zaman sonlanır ve 4 döndürür.
Diğer durumlar yalnızca dc(1) etkileşimli modda olmadığında (ETKİLEŞİMLİ MOD bölümüne bakın) döndürülecektir, çünkü dc(1) etkileşimli modda bu hatalardan biri oluştuğunda durumunu sıfırlar (SIFIRLAMA bölümüne bakın) ve daha fazla girdi kabul eder. Bu durum, -i bayrağı veya --interactive seçeneği ile etkileşimli mod zorunlu kılındığında da geçerlidir.
Bu çıkış durumları, dc(1) uygulamasının hata kontrolü ile kabuk betiklerinde kullanılmasına olanak tanır ve normal davranışı -i bayrağı veya --interactive seçeneği kullanılarak zorunlu kılınabilir.
Etkileşimli Mod
bc(1) gibi dc(1) de bir etkileşimli moda ve bir etkileşimli olmayan moda sahiptir. Hem stdin hem de stdout bir terminale bağlı olduğunda etkileşimli mod otomatik olarak açılır, ancak -i bayrağı ve --interactive seçeneği diğer durumlarda da bu modu açabilir.
Etkileşimli modda dc(1), hatalardan kurtulmaya çalışır (SIFIRLAMA bölümüne bakın) ve normal yürütmede, mevcut girdi için yürütme biter bitmez stdout'u temizler (flush). dc(1) ayrıca DC_SIGINT_RESET ortam değişkeninin içeriğine veya varsayılan değerine bağlı olarak (ORTAM DEĞİŞKENLERİ bölümüne bakın) çıkmak yerine SIGINT durumunda sıfırlanabilir.
Tty Modu
Eğer stdin, stdout ve stderr'in tümü bir TTY'ye bağlıysa, "TTY modu" mevcut olarak kabul edilir ve böylece dc(1), bazı ayarlara tabi olmak kaydıyla TTY modunu açabilir.
Ortamda DC_TTY_MODE ortam değişkeni varsa (ORTAM DEĞİŞKENLERİ bölümüne bakın), bu ortam değişkeni sıfır dışı bir tamsayı içeriyorsa dc(1), stdin, stdout ve stderr'in tümü bir TTY'ye bağlı olduğunda TTY modunu açacaktır. Eğer DC_TTY_MODE ortam değişkeni mevcutsa fakat sıfır dışı bir tamsayı değilse, dc(1) TTY modunu açmayacaktır.
Eğer DC_TTY_MODE ortam değişkeni mevcut değilse, varsayılan ayar kullanılır. Varsayılan ayar -h veya --help seçenekleriyle sorgulanabilir.
TTY modu etkileşimli moddan farklıdır çünkü etkileşimli mod bc(1) spesifikasyonunda (STANDARTLAR bölümüne bakın) gereklidir ve etkileşimli mod yalnızca stdin ve stdout'un bir terminale bağlı olmasını gerektirir.
Komut Satırı Geçmişi Komut satırı geçmişi yalnızca TTY modu etkinse etkinleştirilir; yani stdin, stdout ve stderr bir TTY'ye bağlıysa ve DC_TTY_MODE ortam değişkeni (ORTAM DEĞİŞKENLERİ bölümüne bakın) ile varsayılanı TTY modunu devre dışı bırakmıyorsa. Daha fazla bilgi için KOMUT SATIRI GEÇMİŞİ bölümüne bakın.
İstem TTY modu mevcutsa, bir istem (prompt) etkinleştirilebilir. TTY modunun kendisi gibi, bu da bir ortam değişkeni ile açılıp kapatılabilir: DC_PROMPT (ORTAM DEĞİŞKENLERİ bölümüne bakın).
Eğer DC_PROMPT ortam değişkeni mevcutsa ve sıfır dışı bir tamsayı ise; stdin, stdout ve stderr bir TTY'ye bağlı olduğunda ve -P ve --no-prompt seçenekleri kullanılmadığında istem etkinleştirilir. Okuma istemi de aynı koşullar altında etkinleştirilecektir, ancak -R ve --no-read-prompt seçenekleri de kullanılmamış olmalıdır.
Bununla birlikte, DC_PROMPT mevcut değilse; istem DC_TTY_MODE ortam değişkeni, -P ve --no-prompt seçenekleri ve -R ve --no-read-prompt seçenekleri kullanılarak etkinleştirilebilir veya devre dışı bırakılabilir. Daha fazla ayrıntı için ORTAM DEĞİŞKENLERİ ve SEÇENEKLER bölümlerine bakın.
Sinyal İşleme
Bir SIGINT gönderilmesi dc(1) uygulamasının iki şeyden birini yapmasına neden olur.
Eğer dc(1) etkileşimli modda değilse (ETKİLEŞİMLİ MOD bölümüne bakın) ya da DC_SIGINT_RESET ortam değişkeni (ORTAM DEĞİŞKENLERİ bölümüne bakın) veya varsayılanı tamsayı değilse ya da sıfırsa, dc(1) çıkış yapacaktır.
Ancak, dc(1) etkileşimli modda ise ve DC_SIGINT_RESET ya da varsayılanı sıfır dışı bir tamsayı ise, dc(1) mevcut girdiyi yürütmeyi durduracak ve bir SIGINT aldığında sıfırlanacaktır (SIFIRLAMA bölümüne bakın).
"Mevcut girdi" ifadesinin iki şeyden birini ifade edebileceğini unutmayın. Eğer dc(1) etkileşimli modda stdin'den gelen girdiyi işliyorsa, daha fazla girdi isteyecektir. Eğer dc(1) etkileşimli modda bir dosyadan gelen girdiyi işliyorsa, dosyayı işlemeyi durduracak ve varsa bir sonraki dosyayı işlemeye başlayacaktır; başka bir dosya yoksa stdin'den girdi isteyecektir.
Bu, bir dosya yürütülürken dc(1) uygulamasına bir SIGINT gönderildiğinde, dc(1) hemen bir sonraki dosyayı yürütmeye başlayacağından sinyale yanıt vermemiş gibi görünebileceği anlamına gelir. Bu tasarım gereğidir; kullanıcıların dc(1) ile etkileşime girerken yürüttükleri çoğu dosya, ayrıştırılması hızlı olan fonksiyon tanımlarına sahiptir. Eğer bir dosyanın yürütülmesi uzun sürüyorsa, o dosyada bir hata olabilir. Dosyaların geri kalanı sorunsuz bir şekilde yürütülmeye devam edebilir ve kullanıcının devam etmesine olanak tanır.
SIGTERM ve SIGQUIT sinyalleri dc(1) uygulamasının temizlenip çıkmasına neden olur ve diğer tüm sinyaller için varsayılan işleyiciyi kullanır. Tek istisna SIGHUP sinyalidir; bu durumda ve yalnızca dc(1) TTY modunda olduğunda (TTY MODU bölümüne bakın), bir SIGHUP dc(1) uygulamasının temizlenip çıkmasına neden olur.
Komut Satırı Geçmişi
dc(1) etkileşimli komut satırı düzenlemesini destekler.
Eğer dc(1) TTY modunda olabiliyor ise (TTY MODU bölümüne bakın), geçmiş etkinleştirilebilir. Bu, komut satırı geçmişinin yalnızca stdin, stdout ve stderr'in tümü bir TTY'ye bağlı olduğunda etkinleştirilebileceği anlamına gelir.
TTY modunun kendisi gibi, bu da DC_TTY_MODE ortam değişkeni (ORTAM DEĞİŞKENLERİ bölümüne bakın) ile açılıp kapatılabilir.
Not: sekmeler (tab) 8 boşluğa dönüştürülür.
Yerelleştirme
Bu dc(1) sürümü, farklı diller için hata mesajları ekleme desteğiyle birlikte gelir ve bu nedenle LC_MESSAGES ortam değişkenini destekler.
Ayrıca Bakınız
bc(1)
Standartlar
dc(1) yardımcı program operatörleri ve bazı davranışları, IEEE Std 1003.1-2017 (“POSIX.1-2017”) bc(1) spesifikasyonundaki operatörlerle uyumludur: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html .
Hatalar
Bilinen bir hata yoktur. Hataları https://git.gavinhoward.com/gavin/bc adresine bildirin.
Yazar
Gavin D. Howard gavin@gavinhoward.com ve katkıda bulunanlar.
Gavin D. Howard Ağustos 2024 DC(1)