bc 명령
용도
임의의 정밀도 산술 언어에 대한 해석기를 제공합니다.
구문
설명
bc 명령은 임의의 정밀도 산술 연산을 제공하는 대화식 처리입니다. bc 명령은 먼저 File 매개변수로 지정된 입력 파일을 읽은 후 표준 입력을 읽습니다. 입력 파일은 bc 명령에서 읽고 실행하는 일련의 명령, 명령문 또는 함수 정의를 포함하는 텍스트 파일입니다.
bc 명령은 dc 명령의 프리프로세서입니다. C (컴파일 전용) 플래그를 지정하지 않는 한 자동으로 dc 명령을 호출합니다. -c 플래그가 지정된 경우 bc 명령의 출력은 표준 출력으로 이동합니다.
bc 명령을 사용하면 연산을 위한 입출력 기준을 10진수, 8진수 또는 16진수로 지정할 수 있습니다. 디폴트는 10진수입니다. 또한 이 명령에는 소수점 표기를 위한 스케일링 조항이 있습니다. bc 명령은 항상 . (마침표)를 사용하여 현재 로케일의 일부로 지정된 소수점 문자에 상관없이 기점을 나타냅니다.
bc 명령에 대한 구문은 C 언어의 구문과 유사합니다. bc 명령을 사용하면 ibase 키워드를 입력 기준으로, obase 키워드를 출력 기준으로 지정하여 기준 사이를 변환할 수 있습니다. ibase 키워드에 대해 2 - 16의 범위가 유효합니다. obase 키워드의 범위는 2에서 /usr/include/sys/limits.h 파일에 정의된 BC_BASE_MAX 값으로 설정된 한계까지입니다. ibase 및 obase 설정에 상관없이 bc 명령은 A-F 문자를 16진 값 10-15로 인식합니다.
bc 명령의 출력은 프로그램 읽기로 제어됩니다. 출력은 지정 없이 실행된 모든 표현식의 값을 포함하는 하나 이상의 행으로 구성됩니다. 출력의 기수 및 정밀도는 obase 및 scale 키워드의 값에 의하여 제어됩니다.
bc 명령이 소스 파일로부터 정보를 처리하는 방법에 대한 자세한 정보는 다음 절에서 설명합니다.
GRAMMAR
다음 문법은 bc 프로그램의 구문을 설명합니다program는 유효한 프로그램을 의미합니다:
%token EOF NEWLINE STRING LETTER NUMBER
%token MUL_OP
/* '*', '/', '%' */
%token ASSIGN_OP
/* '=', '+=', '-=', '*=', '/=', '%=', '^=' */
%token REL_OP
/* '==', '<=', '>=', '!=', '<', '>' */
%token INCR_DECR
/* '++', '--' */
%token Define Break Quit Length
/* 'define', 'break', 'quit', 'length' */
%token Return For If While Sqrt
/* 'return', 'for', 'if', 'while', 'sqrt' */
%token Scale Ibase Obase Auto
/* 'scale', 'ibase', 'obase', 'auto' */
%start program
%%
program : EOF
| input_item program
;
input_item : semicolon_list NEWLINE
| function
;
semicolon_list : /* empty */
| statement
| semicolon_list ';' statement
| semicolon_list ';'
;
statement_list : /* empty */
| statement
| statement_list NEWLINE
| statement_list NEWLINE statement
| statement_list ';'
| statement_list ';' statement
;
statement : expression
| STRING
| Break
| Quit
| Return
| Return '(' return_expression ')'
| For '(' expression ';'
relational_expression ';'
expression ')' statement
| If '(' relational_expression ')' statement
| While '(' relational_expression ')' statement
| '{' statement_list '}'
; function : Define LETTER '(' opt_parameter_list ')'
'{' NEWLINE opt_auto_define_list
statement_list '}'
;
opt_parameter_list:/* empty */
| parameter_list
;
parameter_list : LETTER
| define_list ',' LETTER
;
opt_auto_define_list
: /* empty */
| Auto define_list NEWLINE
| Auto define_list ';'
;
define_list : LETTER
| LETTER '[' ']'
| define_list ',' LETTER
| define_list ',' LETTER '[' ']'
;
opt_argument_list : /* empty */
| argument_list
;
argument_list : expression
| argument_list ',' expression
;
relational_expression
: expression
| expression REL_OP expression
;
return_expression : /* empty */
| expression
;
expression : named_expression
| NUMBER
| '(' expression ')'
| LETTER '(' opt_argument_list ')'
| '-' expression
| expression '+' expression
| expression '-' expression
| expression MUL_OP expression
| expression '^' expression
| INCR_DECR named_expression
| named_expression INCR_DECR
| named_expression ASSIGN_OP expression
| Length '(' expression ')'
| Sqrt '(' expression ')'
| Scale '(' expression ')'
;
named_expression : LETTER
| LETTER '[' expression ']'
| Scale
| Ibase
| Obase
;어휘 규칙
다음의 어휘 규칙이 bc 명령에 적용됩니다.
- bc 명령은 가능한 가장 긴 어휘 토큰 또는 주어진 지점에서 시작하는 분리문자를 인식합니다.
- 주석은 /*(슬래시, 별표)로 시작하여 */(별표, 슬래시)로 종료합니다. 주석은 어휘 토큰을 분리할 뿐, 아무런 영향이 없습니다.
- 줄 바꾸기 문자는 NEWLINE 토큰으로 인식됩니다.
- STRING 토큰은 문자열 상수를 나타냅니다. 문자열은 "(이중 인용 부호)로 시작하여 "(이중 인용 부호)로 끝납니다. 인용 부호 사이의 모든 문자는 문자 그대로 인식됩니다. "(이중 인용 부호)를 포함하는 문자열을 지정하는 방법은 없습니다. 각 문자열의 길이는 BC_STRING_MAX 값에 설정된 최대 바이트로 제한되며, limits.h 파일에 정의됩니다.
- 공백 문자는 STRING 토큰에 나타나거나 어휘 토큰을 분리하는 데 사용되는 경우를 제외하고는 영향을 미치지 않습니다.
- \n(백슬래시, 줄 바꾸기) 문자:
- 어휘 토큰을 분리합니다.
- STRING 토큰에서는 문자 순서로 해석됩니다.
- 다중 회선 NUMBER 토큰의 일부인 경우에는 무시됩니다.
- NUMBER 토큰은 다음 문법을
사용합니다.
NUMBER 토큰 값은 ibase 내부 레지스터 값에 의하여 지정된 기준의 숫자로 해석됩니다.NUMBER : integer | '.' integer | integer '.' |integer '.' integer ; integer : digit | integer digit ; digit : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F ; - NUMBER 토큰의 값은 ibase 내부 레지스터의 값으로 지정된 기준에서 숫자로 해석됩니다. 각 숫자는 여기에 나열된 순서로 0 - 15의 값을 가지며, 마침표 문자는 기점을 나타냅니다. ibase 레지스터의 값보다 크거나 같은 숫자가 토큰에 표시되는 경우 동작이 정의되지 않습니다. ibase 및 obase 레지스터 자체에 지정되는 하나의 숫자 값에 대한 예외가 있습니다.
- 다음 키워드는 토큰으로 인식됩니다.
auto for length return sqrt break ibase obase scale while define if quit - 한 키워드 이내를 제외하고,
다음의 문자는 하나의 LETTER 토큰으로 간주됩니다.
a b c d e f g h i j k l m n o p q r s t u v w x y z - 다음의 단일 문자 및 두 개의
문자 계층은 ASSIGN_OP 토큰으로 인식됩니다.
- =(등호)
- +=(더하기 부호, 등호)
- -=(빼기 부호, 등호)
- *= (별표, 등호)
- /= (슬래시, 등호)
- %=(퍼센트, 등호)
- ^= (캐럿, 등호)
- 다음의
단일 문자는 MUL_OP 토큰으로 인식됩니다.
- * (별표)
- ' / (슬래시)
- % (퍼센트)
- 다음 단일 문자 및 두 개의
문자 계층은 REL_OP 토큰으로 인식됩니다.
- ==(이중 등호)
- <= (보다 작음, 등호)
- =(보다 큼 부등호, 등호)
- !=(느낌표, 등호)
- < (보다 작음)
- > (보다 큼)
- 다음 두 개의 문자로 구성된
문자열은 INCR_DECR 토큰으로 인식됩니다.
- ++(이중 더하기 부호)
- --(이중 하이픈)
- 다음의 단일 문자는 토큰으로
인식됩니다. 토큰은 다음과 같이 문자와 이름이 같습니다.
- <줄 바꾸기>
- ((왼쪽 괄호)
- )(오른쪽 괄호)
- , (쉼표)
- +(더하기)
- -(빼기)
- ;(세미콜론)
- [(왼쪽 대괄호)
- ](오른쪽 대괄호)
- ^(캐럿)
- {(왼쪽 중괄호)
- }(오른쪽 중괄호)
- EOF 토큰은 입력 끝에 도달할 때 리턴됩니다.
ID와 연산자
bc 명령으로 인식되는 일반 ID, 배열 ID, 함수 ID와 같은 세 종류의 ID가 있습니다. 세 가지의 모든 유형은 단일 소문자로 구성됩니다. 배열 ID 다음에는 [ ](왼쪽 및 오른쪽 대괄호)가 옵니다. 배열 첨자는 인수나 자동 리스트에 있을 때를 제외하고는 필수입니다. 배열은 1차원 배열이고, BC_DIM_MAX 값으로 지정된 크기까지 포함할 수 있습니다. 인덱싱은 0부터 시작됩니다. 따라서 배열은 0부터 BC_DIM_MAX -1 정의된 값까지 인덱싱됩니다. 첨자는 정수로 잘립니다. 함수 ID 다음에는 ( )(왼쪽 및 오른쪽 괄호)가 와야 하며 포함 인수가 뒤에 올 수도 있습니다. 세 가지 유형의 ID는 서로 충돌하지 않습니다.
bc 프로그램 테이블의 연산자는 모든 연산자의 우선순위 및 결합 순서에 대한 규칙을 요약합니다. 같은 행의 연산자는 우선순위가 동일합니다. 행의 우선순위는 작아지는 순서입니다.
| 연산자 | 결합 순서 |
|---|---|
| ++, - - | 해당사항 없음 |
| 단항 - | 해당사항 없음 |
| ^ | 오른쪽에서 왼쪽 |
| *, /, % | 왼쪽에서 오른쪽 |
| +, 이진 - | 왼쪽에서 오른쪽 |
| =, +=, -=, *=, /=, ^= | 오른쪽에서 왼쪽 |
| ==, <=, >=, !=, <, > | 없음 |
각 표현식 또는 이름 지정된 표현식에는 스케일이 있습니다. 스케일은 표현식의 소수 부분으로 유지되는 소수점 자릿수입니다.
이름 지정된 표현식은 값이 저장되는 위치입니다. 이름 지정된 표현식은 지정의 왼쪽에서 유효합니다. 이름 지정된 표현식의 값은 이름 지정된 위치에 저장된 값입니다. 단순 ID 및 배열 요소는 이름 지정된 표현식이며, 초기값은 0, 초기 스케일은 0입니다.
내부 레지스터 scale, ibase, obase 모두 이름 지정된 표현식입니다. 이러한 레지스터 중 하나의 이름으로 구성된 표현식의 스케일은 0입니다. 이러한 레지스터에 할당된 값은 정수로 잘립니다. scale 레지스터는 (아래 설명한 것과 같이) 식의 스케일을 계산하는 데 사용된 글로벌 값을 포함합니다. 스케일 레지스터의 값은 0 <= 스케일 <= {BC_SCALE_MAX}로 제한되며 기본값은 0입니다. 아이베이스 및 오베이스 레지스터는 각각 입력 및 출력 숫자 기수입니다. 아이베이스 값은 2 <= 아이베이스 <= 16으로 제한됩니다. Obase 값은 2 <= obase = {BC_BASE_MAX}로 제한됩니다
'어휘 규칙' 에 설명된 목록에서 아이베이스 또는 오베이스 레지스터에 한 자리 값이 할당되면 해당 값은 16진수로 가정됩니다. 예를 들어 다음과 같습니다.
ibase=A 현재 ibase 레지스터 값에 상관없이 밑수 10으로 설정합니다. 그렇지 않을 경우, ibase 레지스터 값 이상의 숫자가 입력에 나타날 경우, 동작은 정의되지 않습니다. ibase 및 obase 레지스터 모두 초기값은 10입니다.
내부 계산은 입출력 기준에 관계없이, 10진수처럼 지정된 소수 자릿수로 수행됩니다. 정확한 결과를 얻지 못할 경우, 예를 들어, 다음과 같습니다.
scale=0; 3.2/1
bc 명령은 결과를 자릅니다.
obase 레지스터의 모든 숫자 값은 다음 규칙에 따라 출력됩니다.
- 값이 0 미만이면, 출력은 -(하이픈)입니다.
- 숫자 값에 따라, 출력은 다음 중의
하나입니다.
- 숫자 값의 절대값이 1 이상일 경우, 출력은(3단계에서 설명된) obase 레지스터에 해당하는 일련의 숫자로서 정수 부분의 값입니다. 다음에는 0이 아닌 최상위 숫자이며, 다음에는 각 연속적으로 적은 숫자를 출력합니다.
- 수치 값의 절대값이 1보다 적으나 0보다 크며 수치 값의 스케일이 0보다 클 경우, 문자 0이 출력되는지의 여부는 지정하지 않습니다.
- 수치 값이 0일 경우, 출력 문자는 0입니다.
- 값의 스케일이 0보다 크면,
출력은 . (마침표) 및 obase 레지스터 값에 적합한 일련의 숫자를 순서대로 출력합니다. 숫자는 값 소수부의 최상위 부분을
나타내며, s는 출력되는 값의 스케일을 나타냅니다.
- obase 값이 10이면, 숫자의 s 번호를 출력합니다.
- obase 값이 1보다 크면 s보다 작거나 같은 번호를 출력합니다.
- obase 값이 10보다 작으면 s보다 크거나 같은 번호를 출력합니다.
- 10이 아닌 obase 값의 경우, 이것은 10의 정밀도를 나타내는 숫자이어야 합니다.
- obase 값이 2-16인 경우,
유효한 숫자는 단일 문자의 첫 번째 obase입니다.
각각 0 - 15까지의 값을 나타냅니다.0 1 2 3 4 5 6 7 8 9 A B C D E F - 기준이 16보다 큰 경우, 각 숫자는
여러 자리로 된 10진수로 개별적으로 기록합니다. 최상위 소수 자리를 제외한 각 자리 다음에는 단일 공백 문자가 옵니다. 기준 17-100 사이의 경우,
bc 명령은 두 자리 10진수를 쓰며, 기준 101-1000 사이의
경우, bc 명령은 세 자리 10진수를 기록합니다. 예를 들어,
기준 25의 10진수 1024는 다음과 같이 기록됩니다.
01 15 24기준 125에서는 다음과 같습니다.
008 024
표현식
숫자 상수는 표현식입니다. 스케일은 상수를 나타내는 입력의 기점 다음에 오는 자릿수 또는 기점이 나타나지 않을 경우 0입니다.
시퀀스(expression)는 expression과 값과 스케일이 동일한 표현식입니다. 소괄호는 정상적인 우선순위를 변경하는 데 사용될 수 있습니다.
단항 및 2진 연산자는 다음과 같은 의미를 갖습니다.
| 항목 | 설명 |
|---|---|
| -표현식 | 결과는 표현식의 부정입니다. 결과의 스케일은 표현식의
스케일입니다. 단항 증분 및 감소분 연산자는 조작하는 이름 지정된 표현식의 스케일을 수정하지 않습니다. 결과의 스케일은 이름 지정된 표현식의 스케일입니다. |
| ++명명된_표현식 | 명명된 표현식은 1씩 증가합니다. 결과는 증분 후 명명된 표현식의 값입니다. |
| - -명명된_표현식 | 명명된 표현식은 1씩 감소합니다. 결과는 감소 후 명명된 표현식의 값입니다. |
| named_expression++ | 명명된 표현식은 1씩 증가합니다. 결과는 증가하기 전의 명명된 표현식의 값입니다. |
| named_expression-- - | 명명된 표현식은 1씩 감소합니다. 결과는 감소하기 전의 명명된 표현식의 값입니다. |
지수화 연산자, ^(캐럿)은 오른쪽에서 왼쪽으로 바인드합니다.
| 항목 | 설명 |
|---|---|
| 표현식 ^표현식 | 결과는 두 번째 expression에 제곱을 한 첫 번째
expression입니다. 두 번째 표현식이 정수가 아닐 경우,
동작은 정의되지 않습니다. Ifa는 왼쪽 표현식의 스케일이고b는 오른쪽 표현식의 절대값이며, 결과의 배율은 다음과 같습니다: |
배수사 연산자 * (별표), /(슬래시), %(퍼센트)는 왼쪽에서 오른쪽으로 바인드합니다.
| 항목 | 설명 |
|---|---|
| 표현식 * 표현식 | 결과는 두 가지 표현식의 곱입니다. Ifa및b가 두 표현식의 스케일이라면 결과의 스케일은 다음과 같습니다: |
| 표현식 / 표현식 | 결과는 두 가지 표현식의 몫입니다. 결과의 스케일은 scale의 값입니다. |
| 표현식 % 표현식 | 표현식a및b,a % b는 다음 단계와 동일하게 평가됩니다:
|
덧셈 연산자 +(더하기 부호) 및 -(빼기 부호)는 왼쪽에서 오른쪽으로 바인드합니다.
| 항목 | 설명 |
|---|---|
| 표현식 + 표현식 | 결과는 두 표현식의 합계입니다. 결과의 스케일은 표현식의 최대 스케일입니다. |
| 표현식 - 표현식 | 결과는 두 표현식의 차입니다. 결과의 스케일은 표현식의 최대 스케일입니다. |
다음의 지정 연산자는 오른쪽에서 왼쪽으로 바인드합니다.
- =(등호)
- +=(더하기 부호, 등호)
- -=(빼기 부호, 등호)
- *=(별표, 등호)
- /=(슬래시, 등호)
- %=(퍼센트, 등호)
- ^=(캐럿, 등호)
| 항목 | 설명 |
|---|---|
| 명명된 표현식 = 표현식 | 이 표현식은 오른쪽 표현식의 값을 왼쪽의 이름 지정된 표현식으로 지정합니다. 이름 지정된 표현식 모두의 스케일 및 결과는 표현식의 스케일입니다. |
합성 지정은 다음을 구성합니다.
명명된 표현식 <연산자 >= 표현식
이는 다음과 같습니다.
명명된 표현식 = 명명된 표현식 <연산자 > 표현식
단, 이름 지정된 표현식은 한 번만 평가된다는 점이 다릅니다.
다른 모든 연산자와 달리, 다음 관계 연산자는 if 또는 while 문의 오브젝트로 또는 for 문 내에서만 유효합니다.
- <(보다 작음)
- >(보다 큼)
- <=(보다 작음, 등호)
- >=(보다 큼, 등호)
- ==(이중 등호)
- !=(느낌표, 등호)
| 항목 | 설명 |
|---|---|
| expression1 < expression2 | expression1 값이 expression2 값 미만인 경우 관계는 true입니다. |
| expression1 > expression2 | expression1 값이 expression2 값을 초과하는 경우 관계는 true입니다. |
| expression1 <= expression2 | expression1 값이 expression2 값 이하인 경우 관계는 true입니다. |
| expression1 >= expression2 | expression1 값이 expression2 값 이상인 경우 관계는 true입니다. |
| expression1 == expression2 | expression1 및 expression2 값이 같으면 관계는 true입니다. |
| expression1 != expression2 | expression1 및 expression2 값이 같지 않으면 관계는 true입니다. |
설명
명령문이 표현식일 경우, 주 연산자가 지정이 아니면, 명령문 실행 시 표현식의 값 다음에 줄 바꾸기 문자를 기록합니다.
명령문이 문자열일 경우, 명령문 실행 시 문자열의 값을 기록합니다.
세미콜론 또는 줄 바꾸기 문자로 구분된 명령문은 순차적으로 실행됩니다. Bc 명령의 대화형 호출에서 문법적 생성을 충족하는 줄 바꿈 문자를 읽을 때마다 새 줄을 읽습니다:
input_item : semicolon_list NEWLINEsemicolon_list를 구성하는 명령문의 순차 리스트가 즉시 실행되며, 해당 실행에 의하여 작성된 출력이 버퍼에 지연되지 않고 기록됩니다.
if문(if (relation) statement)인 경우 statement는 관계가 true이면 실행됩니다.
while문(while (relation) statement)은 relation을 테스트하는 루프를 구현합니다. relation이 true이면 항상 statement가 실행되고 relation을 다시 테스트합니다. relation이 false이면 statement 이후에 실행이 재개됩니다.
for문(for (expression; relation; expression) statement)은 다음과 같습니다.
first-expression
while (relation) {
statement
last-expression
}세 개 표현식이 모두 존재해야 합니다.
break문은 for 또는 while문을 종료시킵니다.
자동 문(자동 식별자 [,식별자 ]...) 은 ID 값이 후입선출되게 합니다. ID는 일반 ID나 배열 ID일 수 있습니다. 배열 ID는 배열 이름과 빈 정방(square) 대괄호로 지정됩니다. auto문은 함수 정의에서의 첫 번째 명령문입니다.
정의 문입니다:
define LETTER ( opt_parameter_list ) {
opt_auto_define_list
statement_list
}라는 함수를 정의합니다LETTER. 만약LETTER함수가 이전에 정의된 경우, 정의문은 이전 정의를 대체합니다. 표현식은 다음과 같습니다.
LETTER ( opt_argument_list )를 호출하면LETTER함수입니다. 호출에서 인수 수가 정의의 매개변수 수와 일치하지 않을 경우, 동작은 정의되지 않습니다. 함수는 호출되기 전에 정의됩니다. 함수는 본문 내에서 정의된 것으로 간주되므로, 순환 호출이 유효합니다. 함수가 호출될 경우, 함수 내 숫자 상수의 값은 ibase 레지스터의 값에 의해 지정된 기준으로 해석됩니다.
return문(return 및 return(expression))은 함수를 종료시키고 auto 변수 값을 표시하며, 함수 결과를 지정합니다. 최초 형식은 return(0)과 같습니다. 함수 호출의 값과 스케일은 소괄호로 묶은 표현식의 값과 스케일입니다.
quit문(quit)은 입력에 명령문이 나타나는 지점(if, for 또는 while문이나 함수 정의에 나타나는 경우도 포함)에서 bc 프로그램 실행을 중지합니다.
함수 호출
함수 호출은 함수 이름 다음에 오는 표현식의 쉼표로 구분된 리스트를 포함하는 소괄호로 이루어지며, 표현식은 함수 인수입니다. 인수로서 패스된 전체 배열은 배열 이름 다음에 오는 [ ](왼쪽 및 오른쪽 대괄호)에 의하여 지정됩니다. 모든 함수 인수는 값으로 전달됩니다. 따라서, 형식 매개변수에 대한 변경사항은 실제 인수에 영향을 미치지 않습니다. return문을 실행하여 함수가 종료되는 경우 함수 값은 return문의 괄호 안에 있는 표현식의 값이고, return문이 없거나 표현식이 제공되지 않은 경우 0입니다.
sqrt(expression)의 결과는 표현식의 제곱근입니다. 결과는 최하위 10진수 위치에서 잘립니다. 결과의 스케일은 표현식의 스케일이거나 scale의 값 중 더 큰 값입니다.
length(expression)의 결과는 표현식에서 상위 소수 자릿수의 총 수입니다. 결과의 스케일은 0입니다.
scale(expression)의 결과는 표현식의 스케일입니다. 결과의 스케일은 0입니다.
Bc 프로그램에는 글로벌과 자동(로컬) 두 가지 스토리지 클래스만 있습니다. 함수에 로컬인 ID만 auto 키워드로 선언해야 합니다. 함수에 대한 인수는 함수에 대해 로컬로 존재합니다. 다른 모든 ID는 글로벌로 가정되며 모든 함수에 대해 사용 가능합니다. 모든 식별자(글로벌 및 로컬)의 초기값은 0입니다. 자동으로 선언된 식별자는 함수에 진입할 때 할당되고 함수에서 반환할 때 해제됩니다. 그러므로 함수 호출 사이에서 값을 보유하지 않습니다. auto 배열은 배열 이름 다음에 오는 [ ](왼쪽 및 오른쪽 대괄호)에 의하여 지정됩니다. 함수 시작 시, 매개변수 및 자동 변수로 표시되는 이름의 기존 값을 스택으로 넣습니다. 함수가 리턴할 때까지, 이 이름에 대한 참조는 새로운 값만 참조합니다.
이 함수에서 호출된 다른 함수의 이러한 이름에 대한 참조는 해당 함수 중 하나가 로컬 변수에 대하여 같은 이름을 사용할 때까지 새로운 값을 참조합니다.
-l math 라이브러리의 함수
다음 함수가 -l 플래그를 지정할 때 정의됩니다.
| 항목 | 설명 |
|---|---|
| s(표현식) | expressionx의 사인을 지정합니다. 여기서, expression은 라디안입니다. |
| c(표현식) | expressionx의 코사인을 지정합니다. 여기서, expression은 라디안입니다. |
| a(표현식) | expressionx의 아크 탄젠트를 지정합니다. 여기서, expression은 라디안입니다. |
| l(표현식) | expression의 자연 대수를 지정합니다. |
| e(표현식) | expression의 지수를 지정합니다. |
| j(표현식,표현식) | 정수 순서의 Bessel 함수를 지정합니다. |
이러한 각 함수의 호출 스케일은 함수가 호출될 때 scale 키워드의 값입니다. 이러한 함수가 수학적 함수의 도메인 외부의 인수와 함께 호출될 경우 동작이 정의되지 않습니다.
플래그
| 항목 | 설명 |
|---|---|
| -c | File 매개변수를 컴파일하지만, dc 명령을 호출하지는 않습니다. |
| -l | (소문자 L) math 함수의 라이브러리를 정의하고 scale 변수를 20으로 설정합니다. |
종료 상태
이 명령은 다음과 같은 종료값을 리턴합니다.
| 항목 | 설명 |
|---|---|
| 0 | 정상적으로 완료되었습니다. |
| 1 | 구문 오류가 발생했거나 입력 파일에 액세스할 수 없습니다. |
| 지정되지 않음 | 다른 오류가 발생했습니다. |
예
- bc 명령을 계산기로 사용할 수 있습니다. scale 변수 설정 여부와 해당 값에 시스템은 소수 형식으로
총계를 표시합니다. 다음을 입력하십시오.
표시만0. 배율 변수를 설정하고 댓글을 추가하려면 입력합니다:bc 1/4
화면이 다음과 같이 표시됩니다0.2. 입력합니다:scale = 1 /* Keep 1 decimal place */ 1/4
표시0.250. 입력합니다:scale = 3 /* Keep 3 decimal places */ 1/4
표시28.600. 입력16+63/5
표시15.800. 입력(16+63)/5
표시11.833.71/6bc 명령은 지정을 제외하고, Enter 키를 누를 경우 각 표현식의 값을 표시합니다.
bc 명령 표현식을 키보드에서 직접 입력할 경우, bc 명령 세션을 종료하고 쉘 명령행으로 돌아가려면, EOF(Ctrl-D) 키 시퀀스를 누르십시오.
- C와 같은 프로그램을 기록하거나 실행하려면 다음과 같은 명령을 입력하십시오.화면이 다음과 같이 표시됩니다7.38905609893065022723. 입력하면
화면이 다음과 같이 표시됩니다120. 입력하면f(5) /* 5 factorial */
화면이 다음과 같이 표시됩니다3628800.f(10) /* 10 factorial */이 시퀀스는 prog.bc 파일에 저장된 bc 프로그램을 해석하고 키보드에서 bc 명령문을 추가로 읽습니다. -l 플래그로 bc 명령을 시작하면 수학 라이브러리를 사용할 수 있습니다. 이 예제에서는 수학 라이브러리의 e (지수) 함수를 사용합니다f는 prog.bc 프로그램 파일에 다음과 같이 정의되어 있습니다:
for 또는 while문 뒤에 나오는 명령문은 동일한 행에서 시작해야 합니다. bc 명령 표현식을 키보드에서 직접 입력할 경우, bc 명령 세션을 종료하고 쉘 명령행으로 돌아가려면, EOF(Ctrl-D) 키 시퀀스를 누르십시오./* compute the factorial of n */ define f(n) { auto i, r; r = 1; for (i=2; i<=n; i++) r =* i; return (r); } - 2항식을 역 폴리시 표기법(RPN)으로
변환하려면 다음과 같이 입력하십시오.bc -c화면이 다음을 표시합니다.
(a * b) % (3 + 4 * c)lalb* 3 4lc*+%ps.이 시퀀스는 bc 명령의 infix 표기법 표현식을 dc 명령이 해석할 수 있는 표현식으로 컴파일합니다. dc 명령은 확장된 RPN 표현식을 평가합니다. 컴파일된 출력에서l앞에 변수 이름 앞에 변수 값을 스택에 로드하는 dc 하위 명령을 추가합니다. 다음p는 스택 위에 값을 표시하고s.레지스터에 저장하여 최상위 값을 버립니다.. 이 명령의 표준 출력을 재지정하여 나중에 dc 명령에 대한 파일에서 RPN 표현식을 저장할 수 있습니다. bc 명령 표현식을 키보드에서 직접 입력할 경우, bc 명령 세션을 종료하고 쉘 명령행으로 돌아가려면, EOF(Ctrl-D) 키 시퀀스를 누르십시오.
- pi의 최초 10자리의 근사값을
변수 x로 쉘에 지정하려면 다음과 같이 입력하십시오.
다음 bc 프로그램은 레이블에 따라 표준 출력으로 pi와 같은 근사값을 인쇄합니다.x=$(printf "%s\n" 'scale = 10; 104348/33215' | bc)scale = 10 "pi equals " 104348 / 33215 - (-l(소문자 L)옵션이 지정될 경우,
함수가 사전 정의되는 것과 같이) 함수를 정의하여 지수 함수의 근사값을
계산하려면 다음과 같이 입력하십시오.
처음 10개 정수에 대한 지수 함수 근사값을 인쇄하려면 다음과 같이 입력하십시오.scale = 20 define e(x){ auto a, b, c, i, s a = 1 b = 1 s = 1 for (i = 1; 1 == 1; i++){ a = a*x b = b*i c = a/b if (c == 0) { return(s) } s = s+c } }for (i = 1; i <= 10; ++i) { e(i) }
파일
| 항목 | 설명 |
|---|---|
| /usr/bin/bc | bc 명령을 포함합니다. |
| /usr/lib/lib.b | 수학적 라이브러리를 포함합니다. |
| /usr/bin/dc | 탁상용 계산기를 포함합니다. |