BC(1)                                                     BC(1)
НАЗВАНИЕ
bc  - арифметический язык для вычислений с произвольной
        точностью
СИНТАКСИС
       |bc  [-c] [-l] [файл ...]
ОПИСАНИЕ
Bc - интерактивный  процессор  для  C-подобного  языка,
        позволяющий оперировать числами неограниченной  точнос-
        ти. Ввод производится из указанных файлов, а  затем  со
        стандартного ввода. На самом деле bc  является  препро-
        цессором к команде dc(1), которая вызывается  автомати-
        чески, если только не указана опция -c.
        Смысл опций:
        -c   Только компилировать.  Результат  направляется  на
             стандартный вывод.
        -l   Подключение математической библиотеки для операций
             произвольной точности.
                                                               
        Ниже описывается синтаксис языка bc; L обозначает любую
        из букв [a-z], E - выражение, S - оператор.
                                                               
        Комментарии
             заключаются между /* и */.
         
        Переменные              
             простая переменная: L
             элемент массива: L [ E ]
             слова ibase, obase, scale.                        
                                                               
        Другие операнды                                        
             числа произвольной длины, возможно со знаком и де
             сятичной точкой;                                  
             (E)                               
             sqrt(E)    корень квадратный;
             length(E)  количество значащих десятичных цифр;
             scale(E)   количество десятичных  цифр  в  дробной
                        части;                                 
             L(E,...,E)        
        Операции                                               
            |+  -  *  /  %  ^  (% - остаток, ^ - степень);
            |++  --  (префиксные  и  постфиксные, применяются к
                     переменным);                              
            |==  <=  >=  !=  <>                    
            |=  =+  =-  =*  =/  =%  =^
                   
        Операторы                      
             E
             {S;...;S}
             if (E) S             
             while (E) S             
             for (E; E; E) S           
             пустой_оператор
             break     
             quit                                              
                             
        Определения функций
            |define L (L,...,L) {         
            |   auto L,...,L                                
            |   S;...;S                                        
            |   return (E)    
            |}         
        Функции, определенные в математической (-l) библиотеке:
                                                          
             s(x)    синус;                                    
             c(x)    косинус;    
             e(x)    экспонента;
             l(x)    натуральный логарифм;
             a(x)    арктангенс;
             j(n,x)  функция Бесселя.
              
        Все аргументы функций передаются по значению.
                     
        Значение оператора, являющегося выражением, печатается,
        если он не является оператором присваивания.  Операторы
        могут разделяться как точками с запятой, так и  перево-
        дами строк. Присваивание  переменной  scale  определяет
        точность выполнения операций.  Присваивание  переменным
        ibase и obase определяет систему счисления для ввода  и
        вывода соответственно.
                                 
        Одна и та же буква может быть одновременно использована
        как имя простой переменной, имя массива и имя  функции.
        Все переменные являются глобальными. Автоматические пе-
        ременные  (описанные  как auto) размещаются в стеке при
        входе в функцию. При использовании массивов в  качестве
        аргументов  функций  или  автоматических  переменных за
        именем массива должны следовать пустые квадратные скоб-
        ки.                
                             
ПРИМЕР                          
        Выдать корень квадратный из целых чисел от 1 до 10.
                                
       |/*   Определяется точность вычислений  */
       |     scale = 20
       |/*   Определяется функция  */                
       |     define r(a) {
       |        auto x, y                                      
       |        y = a + 1                                      
       |        x = y + 1                                      
       |        while (y < x) {                                
       |           x = y                                       
       |           y = 0.5 * (x + a / x)                       
       |        }             
       |        return (x)
       |     }                                                 
                                                               
       |/*   Вычисляется значение  */                          
       |     for ( i = 1; i <= 10; i++ ) r(i)                  
       |/*   Выход  */                                         
       |     quit                                              
                                                               
        В  качестве  примеров  можно  использовать  определения
        стандартных функций, хранящиеся в файле /usr/lib/lib.b.
      
ФАЙЛЫ                                                      
        /usr/lib/lib.b  Библиотека математических функций.
        /usr/bin/dc     Встроенный калькулятор.  
                       
СМ. ТАКЖЕ                            
        dc(1).            
                         
СЮРПРИЗЫ                 
        Не обрабатываются логические операции && и ||.
                               
        Оператор for должен содержать все три выражения.
                                        
        Оператор quit интерпретируется при вводе, а не при  вы-
        полнении.