Кіріспе

UNIX жүйесінде кез келген дәлдікте арифметикалық тілді іске асыратын құрал.

bc, яғни "негізгі калькулятор", – C бағдарламалау тіліне ұқсас синтаксисі бар, кез келген дәлдіктегі есептеулерді жүзеге асыратын тіл. bc көбінесе математикалық скрипттерді жазуға немесе интерактивті математикалық орта ретінде қолданылады.

Шолу

Интерактивті пайдалану үшін Unix командалық қабылдағышында bc командасын теріп, мысалы, математикалық өрнекті енгізіп, нәтижесі шығарылады. bc кез келген дәлдікпен жұмыс істей алады, бірақ ол әдепкі бойынша ондық нүктеден кейін нөл цифрді қолданады, сондықтан өрнегі нәтижесін береді (нәтижелер кесіледі, дөңгеленбейді). Бұл фактіні білмейтін жаңа bc пайдаланушыларын таң қалдыруы мүмкін. bc опциясы әдепкі масштабты (ондық нүктеден кейінгі цифрлар) 20-ға орнатады және тілге бірнеше қосымша математикалық функцияларды қосады.

Тарих

bc алғаш рет 1975 жылы Unix жүйесінің 6-шы нұсқасында пайда болды. Ол Bell Labs қызметкері Лоринда Черри Роберт Моррис пен Черри жасаған кез келген дәлдікте есептеулерді жүзеге асыратын dc калькуляторына интерфейс ретінде жазылған. dc кері польшалық нотацияда берілген кез келген дәлдіктегі есептеулерді орындады. bc C тіліне ұқсас синтаксисті dc нотациясына түрлендіретін және нәтижелерді dc арқылы жіберетін қарапайым компилятор (бірнеше жүз жол кодтан тұратын жалғыз yacc бастапқы файлы) арқылы дәстүрлі бағдарламалау тілінің интерфейсін ұсынды. 1991 жылы POSIX bc-ді қатаң түрде анықтап, стандарттады. Осы стандарттың үш іске асырылуы бүгінгі күнге дейін сақталған: Біріншісі – Unix және Plan 9 жүйелерінде сақталған dc-ге интерфейс ретіндегі дәстүрлі Unix іске асырылуы. Екіншісі – 1991 жылы Филип А. Нельсон алғаш шығарған GNU bc еркін бағдарламалық құралы. GNU нұсқасы POSIX стандартынан асып түсетін көптеген кеңейтулерге ие және енді dc-ге интерфейс емес (ол байт-кодты түсіндіретін программа). Үшіншісі – 2003 жылы OpenBSD жүйесінде қайта іске асырылған нұсқа.

POSIX bc

POSIX стандартталған bc тілі дәстүрлі түрде dc бағдарламалау тілінде, dc тілінің күрделі синтаксисінсіз оның мүмкіндіктеріне жоғары деңгейде қол жеткізу үшін бағдарлама ретінде жазылады. Осы форматта bc тілінде бір әріпті айнымалылар, массивтер және функциялар атаулары, сондай-ақ көптеген стандартты арифметикалық операторлар және C тілінен таныс басқару ағыны құрылымдары (if(шарт), while(шарт) және for(бастау;шарт;арттыру)) бар. C тілінен айырмашылығы, if шарттан кейін else болуы міндетті емес. Функциялар define кілт сөзін пайдаланып анықталады, ал олардан мәндер return кілт сөзінен кейін жақшада көрсетілген мән арқылы қайтарылады. auto кілт сөзі (C тілінде қосымша) функцияның жергілікті айнымалысын жариялау үшін қолданылады. Барлық сандар мен айнымалылардың мәні – кез келген дәлдіктегі сандар, олардың дәлдігі (ондық таңбалар саны) global scale айнымалысымен анықталады. Кіріс (интерактивті режимде), шығыс және бағдарлама тұрақтыларының сандық негізін ibase (кіріс негізі) және obase (шығыс негізі) атты резервтелген айнымалыларды орнату арқылы белгілеуге болады. Шығыс нәтиже есептеу нәтижесін айнымалыға жатқызбау арқылы жасалады. bc кодына C тіліндегі /* және */ (бастау және аяқтау) символдары арқылы түсіндірмелер қосуға болады.

Тіркелген функциялары

Квадрат түбірді есептеуге арналған sqrt функциясы POSIX bc-дегі жалғыз кіріктірілген математикалық функция болып табылады. Басқа функциялар сыртқы стандартты кітапханада қолжетімді. Оның аргументінің дәлдігін анықтау үшін масштаб (scale) функциясы (scale айнымалысымен бірге) және оның аргументіндегі маңызды ондық цифрлардың санын анықтау үшін ұзындық (length) функциясы да кіріктірілген.

Стандартты кітапхана функциялары

bc-дің стандартты математикалық кітапханасы (l опциясымен анықталады) синус, косинус, арктангенс, табиғи логарифм, экспоненциалдық функция және екі параметрлі Бессел функциясы J-ді есептеуге арналған функцияларды қамтиды. Көптеген стандартты математикалық функцияларды (соның ішінде басқа кері тригонометриялық функцияларды) осылардың көмегімен құрастыруға болады. Көптеген басқа функциялардың нұсқаларын сыртқы сілтемелерде қараңыз. +bc стандартты кітапханасы bc командаларыФункция сипаттамалары(x) Синус x радиандағы бұрышты қабылдайдыc(x) Косинус x радиандағы бұрышты қабылдайдыa(x) Арктангенс радианмен қайтарадыl(x) Табиғи логарифмді қайтарадыe(x) Экспоненциалдық функция j(n,x) Бессел функциясы x-тің n-ші ретті Бессел функциясын қайтарады. l опциясы масштабты 20-ға өзгертеді, сондықтан модульдеу сияқты операциялар күтпеген нәтижелерді беруі мүмкін. Мысалы, bc l командасын жазып, содан кейін print 3%2 командасын орындасаңыз, 0 шығады. Ал егер bc l командасынан кейін scale=0 деп жазып, содан кейін print 3%2 командасын орындасаңыз, 1 шығады.

9 б. з. б. жоспар

9 bc жоспары POSIX bc-мен толық сәйкес, бірақ қосымша басып шығару операторы бар.

GNU bc

GNU bc POSIX стандарты негізінде жасалған және көптеген жақсартуларды қамтиды. Ол POSIX стандартының dc негізіндегі іске асырылымдарынан толыққандай бөлек және C тілінде жазылған. Дегенмен, ол толық кері үйлесімді, себебі барлық POSIX bc бағдарламалары өзгеріссіз GNU bc бағдарламалары ретінде жұмыс істейді. GNU bc айнымалылары, массивтері және функция атаулары бірнеше таңбадан тұруы мүмкін, C тілінен қосымша операторлар енгізілген, сондай-ақ, егер шартынан кейін else жазылуы мүмкін. Нәтижелерді шығару есептеу нәтижесін өзгермеліге тікелей тағайындамау арқылы (POSIX әдісі) немесе қосылған басып шығару операторын пайдалану арқылы жүзеге асырылады. Сонымен қатар, read операторы есептеу барысында санды интерактивті түрде енгізуге мүмкіндік береді. C стиліндегі түсініктемелерге қоса, # таңбасынан кейін жаңа жолға дейінгі барлық нәрсе ескерілмейді. Соңғы есептеудің мәні әрқашан қосымша құрылған "last" айнымалысында сақталады.

Функциялар

GNU bc-де қолжетімді барлық функциялар POSIX стандартынан алынған. GNU таратылымында стандартты түрде қосымша функциялар көзделмеген.

Үлгі коды

bc ^ операторы оң жағында тек бүтін санмен белгіленген дәрежеге ғана мүмкіндік береді, сондықтан bc қолданушысы жасайтын алғашқы функциялардың бірі – қалқыма нүктелік көрсеткіші бар дәреже функциясы болуы мүмкін. Төмендегі екеуі де стандартты кітапхана қосылған деп есептейді: