






  Утвержден


  2б.00152-01 33 09-3-ЛУ















                  Операционная система МОС ВП


             ПОДСИСТЕМА ИСПОЛНИТЕЛЬНОЙ БИБЛИОТЕКИ


                   Руководство программиста

		     2б.00152-01 33 09-3

                         Листов 269/2К












1K
268K  










                             1987

 Перв.примен.

 2б.00152-01                                       Литера о

















                  Операционная система МОС ВП



               ПОДСИСТЕМА ИСПОЛНИТЕЛЬНОЙ БИБЛИОТЕКИ 



                   Руководство программиста           


    



                       00152-01 33 09-3

                          Листов 267
    
























                             1987









                            - 2 -

                       00152-01 33 09-3






                           АННОТАЦИЯ





       Данный документ предназначен для программистов, разра-

  батывающих программы на языках программирования,  поддержи-

  ваемых операционной системой МОС ВП (далее  по  тексту  MOC

  ВП).


       Документ состоит из двух разделов: математические про-

  цедуры и независимые от языка процедуры.


       Для каждой процедуры приведены формат, описание выпол-

  няемых функций, описание аргументов и примеры использования

  процедур.




























                            - 3 -

                       00152-01 33 09-3






                          СОДЕРЖАНИЕ





  1.  Математические процедуры                              9


  1.1.    МTH$[Z]ACOS    -    арккосинус    угла,

          выраженный в радианах                            10

  1.2.    МTH$[Z]ACOSD   -    арккосинус    угла,

          выраженный в градусах                            15

  1.3.    МTH$[Z]ASIN - арксинус угла, выраженный

          в радианах                                       19

  1.4.    МTH$[Z]ASIND-арксинус угла,  выраженный

          в градусах                                       23

  1.5.    МTH$[Z]ATAN    -    арктангенс    угла,

          выраженный в радианах                            26

  1.6.    МTH$[Z]ATAND   -    арктангенс    угла,

          выраженный в градусах                            29

  1.7.    МTH$[Z]ATAN2   -    арктангенс    угла,

          выраженный   в   радианах,   с    двумя

          аргументами                                      33

  1.8.    МTH$[Z]ATAND2   -   арктангенс    угла,

          выраженный   в   градусах,   с    двумя

          аргументами                                      36

  1.9.    МTH$[Z]ATANH     -      гиперболический

          арктангенс                                       40

  1.10.   МTH$C[Z]ABS   -   абсолютное   значение



                            - 4 -

                       00152-01 33 09-3


          комплексного числа                               42

  1.11.   МTH$C[Z]COS- комплексный косинус                 47

  1.12.   МTH$C[Z]EXP - комплексная экспонента             52

  1.13.   МTH$C[Z]LOG -  комплексный  натуральный

          логарифм                                         58

  1.14.   МTH$[Z]CMPLX   -   комплексное   число,

          составленное  из  чисел   с   плавающей

          запятой                                          62

  1.15.   МTH$[Z]CONJG - сопряжение  комплексного

          числа                                            67

  1.16.   МTH$[Z]COS - косинус угла,  выраженного

          в радианах                                       71

  1.17.   МTH$[Z]COSD - косинус угла, выраженного

          в градусах                                       73

  1.18.   МTH$[Z]COSH - гиперболический косинус            76

  1.19.   МTH$C[Z]SIN   -    комплексный    синус

          комплексного числа                               81

  1.20.   МTH$C[Z]SQRT -  комплексный  квадратный

          корень                                           85

  1.21.   МTH$CVT[Z]_[Z]     -     преобразование

          величины с удвоенной точностью                   89

  1.22.   МTH$CVT_[Z]A_[Z]A   -    преобразование

          массива величин с удвоенной точностью            91

  1.23.   МTH$[Z]EXP - экспонента                          93

  1.24.   МTH$[Z]IMAG - мнимая часть комплексного

          числа                                            98

  1.25.   МTH$[Z]LOG - натуральный логарифм               101




                            - 5 -

                       00152-01 33 09-3


  1.26.   МTH$[Z]LOG2 - логарифм по основанию 2           105

  1.27.   МTH$[Z]LOG10 - десятичный логарифм              107

  1.28.   МTH$PANDOM - генератор  псевдослучайных

          чисел                                           110

  1.29.   МTH$[Z]REAL  -   действительная   часть

          комплексного числа                              113

  1.30.   МTH$[Z]SIN - синус угла, выраженного  в

          радианах                                        116

  1.31.   МTH$[Z]SINCOS - синус и  косинус  угла,

          выраженного в радианах                          118

  1.32.   МTH$[Z]SINCOSD - синус и косинус  угла,

          выраженного в градусах                          123

  1.33.   МTH$SIND - синус  угла,  выраженного  в

          градусах                                        128

  1.34.   МTH$SINH - гиперболический синус                131

  1.35.   МTH$[Z]SQRT - квадратный корень                 135

  1.36.   МTH$[Z]TAN - тангенс угла,  выраженного

          в радианах                                      139

  1.37.   МTH$[Z]TAND - тангенс угла, выраженного

          в градусах                                      141

  1.38.   МTH$[Z]TANH        -         вычисление

          гиперболического тангенса                       144

  1.39.   МTH$[Z]UMAX - вычисление максимума              148

  1.40.   МTH$UMIN - вычисление минимума                  149


  2.  Независимые от языка процедуры                      152


  2.1.    ОTS$CVT_L_TB-преобразование целого  без




                            - 6 -

                       00152-01 33 09-3


          знака в двоичную символьную строку              152

  2.2.    ОTS$CVT_L_TI - преобразование целого со

          знаком в десятичную символьную строку           154

  2.3.    ОTS$CVT_L_TL-преобразование  целого   в

          символьную строку                               157

  2.4.    ОTS$CVT_L_TO  -  преобразование  целого

          без  знака  в  восьмеричную  символьную

          строку                                          160

  2.5.    ОTS$CVT_L_TU  -  преобразование  целого

          без  знака  в   десятичную   символьную

          строку                                          162

  2.6.    ОTS$CVT_L_TZ - преобразование целого  в

          шестнадцатеричную символьную строку             166

  2.7.    ОTS$CNVOUT  -  преобразование  числа  с

          плавающей запятой форматов D, G, н              169

  2.8.    ОTS$CVT_TB_L - преобразование  двоичной

          символьной строки в целое                       171

  2.9.    ОTS$CVT_TI_L      -      преобразование

          десятичной символьной строки в целое            176

  2.10.   ОTS$CVT_TL_L      -      преобразование

          логической символьной строки в целое            179

  2.11.   ОTS$CVT_TO_L-преобразование

          восьмеричной символьной строки в  целое

          без знака                                       182

  2.12.   ОTS$CVT_TU_L      -      преобразование

          десятичной символьной строки без  знака

          в целое                                         186




                            - 7 -

                       00152-01 33 09-3


  2.13.   ОTS$CVT_T_[Z] - преобразование числовой

          символьной   строки   в   значение    с

          плавающей запятой                               189

  2.14.   ОTS$CVT_TZ_L      -      преобразование

          шестнадцатеричной символьной  строки  в

          целое без знака                                 197

  2.15.   ОTS$DIVC[Z] - комплексное деление               202

  2.16.   ОTS$DIV_PK_LONG  -  деление  десятичных

          чисел в упакованном формате  с  длинным

          делителем                                       207

  2.17.   ОTS$DIV_PK_SHORT -  деление  десятичных

          чисел в упакованном формате с  коротким

          делителем                                       213

  2.18.   ОTS$MOVE3  -   пересылка   данных   без

          заполнения                                      216

  2.19.   ОTS$MOVE5   -   пересылка   данных    с

          заполнением                                     218

  2.20.   ОTS$MULC[Z] - комплексное умножение             221

  2.21.   ОTS$POWC[Z]C[Z]      -       возведение

          комплексного  основания  в  комплексную

          степень                                         225

  2.22.   ОTS$POWC[Z]J - возведение  комплексного

          основания в целую степень                       230

  2.23.   ОTS$POWD[Z]  -  возведение  в   степень

          основания с плавающей запятой формата D         233

  2.24.   ОTS$POWGX  -   возведение   в   степень

          основания с плавающей запятой формата G         237




                            - 8 -

                       00152-01 33 09-3


  2.25.   ОTS$POWH[Z]  -  возведение  в   степень

          основания с плавающей запятой формата н         241

  2.26.   ОTS$POWII - возведение целого основания

          в целую степень                                 245

  2.27.   ОTS$POWJJ  -   возведение   в   степень

          основания размером в длинное слово              247

  2.28.   ОTS$POWR[Z]  -  возведение  в   степень

          основания с плавающей запятой формата F         248

  2.29.   ОTS$SCOPY_DXDX  -  копирование  строки,

          указанной дескриптором                          253

  2.30.   ОTS$SCOPY_R_DX  -  копирование  строки,

          указанной посредством ссылки                    257

  2.31.   ОTS$SFREE1_DD  -   освобождение   одной

          динамической строки                             260

  2.32.   ОTS$SFREEN_DD    -    освобождение    N

          динамических строк                              262

  2.33.   ОTS$SGET1_DD  -   распределение   одной

          динамической строки                             263






















                            - 9 -

                       00152-01 33 09-3


                 1. Математические процедуры




       В данном разделе  приводится  описание  математических

  процедур. Математические процедуры выполняют алгебраические

  и тригонометрические функции над числами с плавающей  запя-

  той и комплексными числами.


       Перечень обозначений, используемых в данном разделе:


       [Z] - тип данных;

       П   = 3,1415926;

       /X/ - абсолютное значение х;

       А   - любое действительное число;

       F   - число бит дробной части;

       Е   - число бит показателя степени;

       R   - действительная часть комплексного числа;

       I   - мнимая часть комплексного числа;

       [Z]ATAND(X) - процедура MTH$[Z]ATAND(X);

       [Z]ATAN(X)  - процедура MTH$[Z]ATAN(X);

       [Z]ATANH(X) - процедура MTH$[Z]ATANH(X);

       [Z]SQRT(X)  - процедура MTH$[Z]SQRT(X);

       [Z]LOG(X)   - процедура MTH$[Z]LOG(X);

       [Z]LOG2(X)  - процедура MTH$[Z]LOG2(X);

       [Z]LOG10(X) - процедура MTH$[Z]LOG10(X);

       [Z]COS(X)   - процедура MTH$[Z]LOG10(X)

       [Z]SIN(X)   - процедура MTH$[Z]SIN(X);

       [Z]COSD(X)  - процедура MTH$[Z]COSD(X);

       [Z]SIND(X)  - процедура MTH$[Z]SIND(X);



                           - 10 -

                       00152-01 33 09-3


       [Z]EXP(X)   - процедура MTH$[Z]EXP(X);

       [Z]SINH(X)  - процедура MTH$[Z]SINH(X);

       [Z]COSH(X)  - процедура MTH$[Z]COSH(X);

       АRCTAN(X)   - арктангенс X, выраженный в градусах;

       АRCTAN(X)   - арктангенс X, выраженный в радианах;

       СOS(X)      - косинус X;

       СOSH(X)     - гиперболический косинус X;

       SIN(X)      - синус X;

       SINH(X)     - гиперболический синус X;

       LN(X)       - натуральный логарифм X;

       СLN(X)      - комплексный натуральный логарифм X;

       LOG2(X)     - логарифм X по основанию 2;

       (X)(MOD 2**32) - X по модулю 2**32;

       X!          - факториал X;

       SIGN(X)     - функция знака числа X;

       ЕXP(X)      - экспонента X;

       CEXP(X)     - комплексная экспонента;

       СABS(X)     - абсолютное значение комплексного числа;

       INT(X)      - целая часть от числа X;

       СEILING(X)  - наименьшее целое число, большее X.



       1.1. МTH$[Z]ACOS    -    арккосинус    угла,

            выраженный в радианах


       Дан косинус угла, процедура MTH$[Z]ACOS вычисляет арк-

  косинус угла (в радианах).







                           - 11 -

                       00152-01 33 09-3


       Формат:

       МTH$ACOS X

       МTH$DACOS X

       МTH$GACOS X

       МTH$HACOS радиан,X


       Точки входа JSB:

       МTH$ACOS_R4

       МTH$DACOS_R7

       МTH$GACOS_R7

       МTH$HACOS_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Угол в радианах. Возвращаемое значение является  углом

  между 0 и П. Процедура MTH$[Z]ACOS возвращает число с  пла-

  вающей запятой формата F; процедура MTH$[Z]DACOS возвращает

  число с плавающей запятой формата D; процедура MTH$[Z]GACOS

  возвращает число с плавающей запятой формата  G;  процедура

  MTH$HACOS возвращает угол в аргументе радиан.


       Аргументы:


       Х




                           - 12 -

                       00152-01 33 09-3
   

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Косинус угла. Аргумент X является адресом числа с пла-

  вающей запятой. Абсолютное значение X  должно  быть  меньше
   
  или равно 1. Для процедуры MTH$ACOS аргумент  X  определяет

  число  с  плавающей  запятой  формата  F;   для   процедуры

  MTH$DACOS - число с плавающей запятой формата D; для проце-

  дуры MTH$GACOS - число с плавающей запятой формата  G;  для

  процедуры MTH$HACOS - число с плавающей запятой формата H.


       Радиан

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Угол (в радианах), косинус которого  задан  с  помощью

  аргумента X. Аргумент радиан является адресом числа с  пла-

  вающей запятой  формата  H.  Аргумент  радиан  используется

  только процедурой MTH$HACOS.


       Описание.

       В табл. 1  приведены  способы  вычисления  арккосинуса

  угла.




                           - 13 -

                       00152-01 33 09-3


                                                   Tаблица 1

  ----------------------------------------------------------

  Значение Х  !        Возвращаемое значение

  ----------------------------------------------------------

   0          !   П/2

   1          !   0

  -1          !   П

  0<Х<1       !   [Z]ATAN([Z]SQRT(1-X**2)/X)            (1)

  -1<Х<0      !   [Z]ATAN([Z]SQRT(1-X**2)/X)+П          (2)

  1</Х/       !   Сигнализируется об ошибке MTH$_INVARGMAT


       Сигнализируемые значения состояния:

  SS$-ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$-INVARGMAT

       - неверный аргумент: абсолютное значение  аргумента  Х

         больше 1. Процедура LIB$SIGNAL копирует зарезервиро-

         ванный  операнд  с  плавающей   запятой   в   вектор

         CHF$L_MCH_SAVR0/R1. Результатом является  зарезерви-

         рованный операнд с плавающей запятой, если  не  пре-

         дусмотрена программа обработки исключительного  сос-

         тояния для изменения CHF$L_MCH_SAVR0/R1.









                           - 14 -

                       00152-01 33 09-3


       Пример 1.

     100  !+

          ! Данная программа на языке программирования бейсик

          ! демонстрирует использование процедуры MTH$ACOS

          !-

            EXTERNAL REAL FUNCTION MTH$ACOS

            DECLARE REAL COS_VALUE, ANGLE

     300    INPUT "COSINE VALUE BETWEEN -1 AND +1 ";COS_VALUE

     400    IF (COS_VALUE < -1) OR

            (COS_VALUE > 1)

                    THEN PRINT "INVALID COSINE VALUE"

                          GOTO 300

     500    ANGLE = MTH$ACOS( COS_VALUE )

            PRINT "THE ANGLE WITH THAT COSINE IS"; ANGLE;

            "RADIANS"

    32767   END


       Результат выполнения данной программы следующий:


       $ RUN ACOS

       СOSINE VALUE BETWEEN -1 AND +1 ?  0,5

       THE ANGLE WITH THAT COSINE IS 1,0472 RADIANS


       Пример 2.

       РROGRAM GETANGLE(INPUT,OUTPUT);

       (+)

       ( Данная программа на языке программирования паскаль

       ( вычисляет угол, косинус которого задан.

       (-)



                           - 15 -

                       00152-01 33 09-3


       VAR

         COS : REAL;

       FUNCTION MTH$ACOS(COS : REAL) : REAL;

         EXTERN;

       ВEGIN

         WRITE('COSINE VALUE BETWEEN -1 AND +1: ');

         READ(COS);

         WRITELN('THE ANGLE WITH тнат COSINE IS',

            MTH$ACOS(COS), ' RADIANS');

        END.


       Результат выполнения данной программы следующий:


       $ RUN ACOS

       СOSINE VALUE BETWEEN -1 AND +1: 0,5

       ТHE ANGLE WITH THAT COSINE IS 1,04720е+00 RADIANS



       1.2. МTH$[Z]ACOSD   -    арккосинус    угла,

            выраженный в градусах


       По  заданному  косинусу  угла  процедура  MTH$[Z]ACOSD

  вычисляет арккосинус угла (в градусах).


       Формат:

       МTH$ACOSD  X

       МTH$DACOSD X

       МTH$GACOSD X

       МTH$HCOSD градус, X






                           - 16 -

                       00152-01 33 09-3


       Точки входа JSB:

       МTH$ACOSD_R4

       МTH$DACOSD_R7

       МTH$GACOSD_R7

       МTH$HACOSD_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Угол в градусах. Возвращаемый угол является  значением

  между 0 и 180. Процедура MTH$ACOSD возвращает число с  пла-

  вающей запятой формата F; процедура MTH$DACOSD  -  число  с

  плавающей запятой формата D; процедура MTH$GACOSD - число с

  плавающей запятой формата G; процедура MTH$HCOSD возвращает

  угол в аргументе градус.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата G,

            число с плавающей запятой формата D,

            число с плавающей запятой формата H

       Доступ: только чтение



                           - 17 -

                       00152-01 33 09-3


       Механизм: посредством ссылки

       Косинус угла. Аргумент X является адресом числа с пла-

  вающей запятой. Абсолютное значение аргумента X должно быть

  меньше или равно 1. Для процедуры MTH$ACOS аргумент X опре-

  деляет число с плавающей запятой формата F;  для  процедуры

  MTH$DACOS - число с плавающей запятой формата D; для проце-

  дуры MTH$GACOS - число с плавающей запятой формата  G;  для

  процедуры MTH$HACOS - число с плавающей запятой формата H.


       Градус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Угол (в градусах), косинус которого  задан  аргументом

  X. Аргумент градус является адресом числа с плавающей запя-

  той формата H. Аргумент градус используется только процеду-

  рой MTH$HACOSD.


       Описание.

       Вычисление  арккосинуса  угла  (в  градусах),  косинус

  которого равен X, приведено в табл. 2.
















                           - 18 -

                       00152-01 33 09-3


                                                   Tаблица 2

  ----------------------------------------------------------

  Значение Х  !    Возвращаемый угол

  ----------------------------------------------------------

   0          ! 90

   1          ! 0

  -1          ! 180

  0<X<1       ! [Z]ATAN([Z]SQRT(1-X**2)/X)              (3)

  -1<X<0      ! [Z]ATAND([Z]SQRT(1-X**2)/X)+180         (4)

   1</X/      ! Сигнализируется об ошибке MTH$_INVARGMAT


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_INVARGMAT

       - неверный аргумент: абсолютное значение  аргумента  X

         больше 1. Процедура LIB$SIGNAL копирует зарезервиро-

         ванный  операнд  с  плавающей   запятой   в   вектор

         CHF$L_MCH_SAVR0/R1. Результатом является  зарезерви-

         рованный операнд с плавающей запятой, если  не  пре-

         дусмотрена программа обработки исключительного  сос-

         тояния для изменения CHF$L_MCH_SAVR0/R1.









                           - 19 -

                       00152-01 33 09-3


       Пример.

       РROGRAM ACOSD(INPUT,OUTPUT);

       (+)

       ( Данная программа на языке программиирования паскаль

       ( использует процедуру MTH$ACOSD

       (-)

       FUNCTION MTH$ACOSD(COS : REAL): REAL; EXTERN;

       VAR

         COSINE : REAL;

         RET_STATUS : REAL;

       ВEGIN

         COSINE := 0,5;

         RET_STATUS := MTH$ACOSD(COSINE);

         WRITELN('THE ANGLE, IN DEGRESS, IS: ', RET_STATUS);

       ЕND.


       Результат выполнения данной программы следующий:


        THE ANGLE, IN DEGRESS, IS:  6,00000е+01



       1.3. МTH$[Z]ASIN - арксинус угла, выраженный

            в радианах


       Дан синус угла, процедура MTH$[Z]ASIN вычисляет аркси-

  нус угла (в радианах).


       Формат:

       МTH$ASIN X

       МTH$DASIN X




                           - 20 -

                       00152-01 33 09-3


       МTH$GASIN X

       МTH$HASIN радиан, X


       Точки входа JSB:

       МTH$ASIN_R4

       МTH$DASIN_R7

       МTH$GASIN_R7

       МTH$HASIN_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Угол в радианах. Возвращаемый угол имеет значение меж-

  ду - П/2 и +П/2. Процедура MTH$ASIN возвращает число с пла-

  вающей запятой формата F; процедура  MTH$DASIN  -  число  с

  плавающей запятой формата D; процедура MTH$GASIN - число  с

  плавающей запятой формата G; процедура MTH$HASIN возвращает

  угол в аргументе радиан.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,




                           - 21 -
               
                       00152-01 33 09-3


            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Синус угла. Аргумент X является адресом числа  с  пла-

  вающей запятой. Абсолютное значение аргумента X должно быть

  меньше или равно 1. Для процедуры MTH$ASIN аргумент X опре-

  деляет число с плавающей запятой формата F;  для  процедуры

  MTH$DASIN - число с плавающей запятой формата D; для проце-

  дуры MTH$GASIN - число с плавающей запятой формата  G;  для

  процедуры MTH$HASIN - число с плавающей запятой формата H.


       Радиан

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Угол (в радианах),  синус  которого  задан  с  помощью

  аргумента X. Аргумент радиан является адресом числа с  пла-

  вающей запятой  формата  H.  Аргумент  радиан  используется

  только процедурой MTH$HASIN.


       Описание.

       Вычисление угла (в радианах), синус которого равен  X,

  приводится в табл. 3.










                           - 22 -

                       00152-01 33 09-3


                                                   Tаблица 3

  ----------------------------------------------------------

  Значение Х !    Возвращаемый угол

  ----------------------------------------------------------

   0         !    0

   1         !    П/2

  -1         !   -П/2

  0</Х/<1    !    [Z]ATAN(X/[Z]SQRT(1-X**2))            (5)

  1</Х/      !    Сигнализируется об ошибке MTH$_INVARGMAT


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_INVARGMAT

       - неверный аргумент: абсолютное значение  аргумента  Х
                                                             
         больше 1. Процедура LIB$SIGNAL копирует зарезервиро-

         ванный  операнд  с  плавающей   запятой   в   вектор

         CHF$L_MCH_SAVR0/R1. Результатом является  зарезерви-

         рованный операнд, если  не  предусмотрена  программа

         обработки исключительного  состояния  для  изменения

         CHF$L_MCH_SAVR0/R1.











                           - 23 -

                       00152-01 33 09-3
                                 

       1.4. МTH$[Z]ASIND-APKCиHуC угла,  выраженный

            в градусах


       Дан синус угла, процедура MTH$ASIND вычисляет значение

  арксинуса угла (в градусах).


       Формат:

       МTH$ASIND X

       МTH$DASIND X

       МTH$GASIND X

       МTH$HASIND градус,X


       Точки входа JSB:

       МTH$ASIND_R4

       МTH$DASIND_R7

       МTH$GASIND_R7

       МTH$HASIND_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Угол в градусах. Возвращаемый угол имеет значение меж-

  ду -90 и +90. Процедура MTH$ASIND возвращает число  с  пла-

  вающей запятой формата F; процедура MTH$DASIND  -  число  с

  плавающей запятой формата D; процедура MTH$GASIND - число с




                           - 24 -

                       00152-01 33 09-3


  плавающей запятой формата G; процедура  MTH$HASIND  возвра-

  щает угол в аргументе радиан.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение

       Механизм: посредством ссылки

       Синус  угла.  Аргумент  Х  является  адресом  числа  с

  плавающеи запятой. Абсолютное значение аргумента  Х  должно

  быть меньше или равно 1. Для процедуры MTH$ASIND аргумент Х

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DASIND - число с плавающей запятой формата D;  для

  процедуры MTH$GASIND - число с плавающей запятой формата G;

  для  процедуры  MTH$HASIND  -  число  с  плавающей  запятой

  формата Н.


       Градус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством ссылки

       Угол (в градусах),  синус  которого  задан  с  помощью

  аргумента Х.  Аргумент  градус  является  адресом  числа  с



                           - 25 -

                       00152-01 33 09-3


  плавающей запятой формата Н. Аргумент  градус  используется

  только процедурой MTH$HASIND.


       Описание.

       Вычисление арксинуса угла (в градусах), синус которого

  равен Х, приводится в табл.4.

                                                   Таблица 4

   ---------------------------------------------------------

   Значение Х ! Возвращаемыи угол

   ---------------------------------------------------------

      0       !   0

      1       !   90

    - 1       ! - 90

     0</Х/<1  ! [Z]ATAN(X/[Z]SQRT(1-X**2))            (6)

     /Х/>1    ! сигнализируется об ошибке MTH$_INVARGMAT


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_INVARGMAT

       - неверныи аргумент: абсолютное значение Х  больше  1.

         Процедура   LIB$SIGNAL   копирует   зарезервированый

         операнд    с    плавающей    запятой    в     вектор

         CHF$L_MCH_SAVR0/R1.       Результатом       является

         зарезервированныи  операнд,  если  не  предусмотрена




                           - 26 -

                       00152-01 33 09-3


         программа обработки  исключительного  состояния  для

         изменения CHF$L_MCH_SAVR0/R1.



       1.5. МTH$[Z]ATAN    -    арктангенс    угла,

            выраженный в радианах


       Дан  тангенс  угла,  процедура  MTH$[Z]ATAN  вычисляет

  значение арктангенса угла (в радианах).


       Формат:

       МTH$ATAN  Х

       МTH$DATAN Х

       МTH$GATAN Х

       МTH$HATAN радиан,Х


       Точки входа JSB:

       МTH$ATAN_R4

       МTH$DATAN_R7

       МTH$GATAN_R7

       МTH$HATAN_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения






                           - 27 -

                       00152-01 33 09-3


       Угол в  радианах.  Возвращаемый  угол  имеет  значение

  между -П/2 и +П/2. Процедура MTH$ATAN  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DATAN - число  с

  плавающей запятой формата D; процедура MTH$GATAN - число  с

  плавающей запятой формата G; процедура MTH$HATAN возвращает

  угол в аргументе радиан.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата н,

            число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Тангенс угла. Аргумент  Х  является  адресом  числа  с

  плавающей  запятой.  Для  процедуры  MTH$ATAN  аргумент   Х

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DATAN - число с плавающей запятой формата  D;  для

  процедуры MTH$GATAN - число с плавающей запятой формата  G;

  для процедуры MTH$HATAN - число с плавающей запятой формата

  Н.


       Радиан

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата Н

       Доступ: только запись



                           - 28 -

                       00152-01 33 09-3


       Механизм: посредством ссылки

       Угол (в радианах), тангенс которого  задан  с  помощью

  аргумента Х.  Аргумент  радиан  является  адресом  числа  с

  плавающей запятой формата Н. Аргумент  радиан  используется

  только процедурой MTH$HATAN.


       Описание.

       Вычисление   (в    радианах)    функции    арктангенса

  основывается на следующих тождествах:


       1) ARCTAN(X)=X-X**3/3+X**5/5-X**7/7+...;          (7)

       2) ARCTAN(X)=X+X*Q(X**2),                         (8)

  где Q(Y)=-Y/3+Y**2/5-Y**3/7+...;

       3) ARCTAN(X)=X*P(X**2),                           (9)

  где P(Y)=1-Y/3+Y**2/5-Y**3/7+...;

       4) ARCTAN(X)=п/2-ARCTAN(1/X);                    (10)

       5) ARCTAN(X)=ARCTAN(A)+ARCTAN((X-A)/(1+A*X)).    (11)


       Вычисление  арктангенса  угла  (в  радианах),  тангенс

  которого равен Х, приведено в табл. 5.

                                                    Таблица 5

  -----------------------------------------------------------

  Значение Х   !    Возвращаемый угол

  -----------------------------------------------------------

  0=<Х=<3/32   !    X+X*Q(X**2),                      (12)

               !    где Q(Y)=-Y/3+Y**2/5-Y**3/7+...

  3/32<Х=<11   !    ATAN(A)+V*(P(V**2)),             (13)

               !    где V=(X-A)/(1+A*X),




                           - 29 -

                       00152-01 33 09-3


                                          Продолжение табл. 5

  -----------------------------------------------------------

  Значение Х   !    Возвращаемый угол

  -----------------------------------------------------------

               !        P(V)=1-V/3+V**2/5-V**3/7+...

  Х>11         !    П/2-W*(P(W**2)),                 (14)

               !    где W=1/X,

               !        P(W)=1-W/3+W**2/5-W**3/7+...

  Х<0          !    -[Z]ATAN(/X/)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.



       1.6. МTH$[Z]ATAND   -    арктангенс    угла,

            выраженный в градусах


       Дан тангенс  угла,  процедура  MTH$[Z]ATAND  вычисляет

  значение арктангенса угла (в градусах).


       Формат:

       МTH$ATAND Х

       МTH$DATAND Х

       МTH$GATAND Х

       МTH$HATAND градус, Х





                           - 30 -

                       00152-01 33 09-3


       Точки входа JSB:

       МTH$ATAND_R4

       МTH$DATAND_R7

       МTH$GATAND_R7

       МTH$HATAND_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Угол в  градусах.  Возвращаемый  угол  имеет  значение

  между -90 и +90. Процедура  MTH$ATAND  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DATAND - число с

  плавающей запятой формата D; процедура MTH$GATAND - число с

  плавающей   запятой   формата   G.   Процедура   MTH$HATAND

  возвращает угол в аргументе градус.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение



                           - 31 -

                       00152-01 33 09-3


       Механизм: посредством ссылки

       Тангенс угла. Аргумент Х является адресом числа с пла-

  вающей запятой. Абсолютное значение X  должно  быть  меньше

  или равно 1. Для процедуры MTH$ATAND аргумент Х  определяет

  число  с  плавающей  запятой  формата  F;   для   процедуры

  MTH$DATAND аргумент Х определяет число с плавающей  запятой

  формата D; для процедуры MTH$GATAND аргумент  Х  определяет

  число  с  плавающей  запятой  формата  G;   для   процедуры

  MTH$HATAND аргумент х определяет число с плавающей  запятой

  формата Н.


       Градус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством ссылки

       Угол (в градусах), тангенс которого  задан  с  помощью

  аргумента Х. Аргумент градус является адресом числа с  пла-

  вающей запятой  формата  Н.  Аргумент  градус  используется

  только процедурой MTH$HATAND.


       Описание.

       Вычисление   функции   арктангенса   основывается   на

  следующих тождествах:


       1) ARCTAND(X)=180/П(X-X**3/3+X**5/5-X**7/7+...);  (15)

       2) ARCTAND(X)=64*X+X*Q(X**2),                     (16)

  где Q(Y)=180/П*[(1-64*П/180)-Y/3+Y**2/5-Y3**/7+...];

       3) ARCTAND(X)=X*P(X**2),                          (17)



                           - 32 -

                       00152-01 33 09-3

                                       
  где P(Y)=180/П*[(1-Y/3+Y**2/5-Y**3/7+Y**4/9-...];

       4) ARCTAND(X)=90-ARCTAND(1/X);                    (18)

       5) ARCTAND(X)=ARCTAND(A)+ARCTAND((X-A)/(1+A*X)).  (19)


       Вычисление угла (в градусах), тангенс  которого  равен

  Х, приводится в табл.6.

                                                    Таблица 6

  -----------------------------------------------------------

  Значение Х ! Возвращаемый угол

  -----------------------------------------------------------

  Х=<3/32    ! 64*X+X*Q(X**2),                           (20)

             ! где Q(Y)=180/П*[(1-64*П/180)-Y/3+Y**2/5-

             ! -Y**3/7+Y**4/9-...]

  3/32<Х=<11 ! ATAND(A)+V*P(V**2),                       (21)

             ! где V=(X-A)/(I+A*X)

  Х>11       ! 90-W*(P(W**2)),                           (22)

             ! где W=1/X,

             !     P(Y) =180/п*[1-Y/3+Y**2/5-Y**3/7+...

  Х<0        ! -[Z]ATAND(/X/)                            (23)


       Сигнализируемые значения состояния:

  SS$-ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.








                           - 33 -

                       00152-01 33 09-3


       1.7. МTH$[Z]ATAN2   -    арктангенс    угла,

            выраженный   в   радианах,   с    двумя

            аргументами


       Данная  процедура   вычисляет   арктангенс   угла   (в

  радианах), тангенс которого задан в виде  частного  Y  и  X

  (Y/X).


       Формат:

       МTH$ATAND2 Y,X

       МTH$DATAN2 Y,X

       МTH$GATAN2 Y,X

       МTH$HATAN2 радиан,Y,X


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Угол в радианах. Процедура MTH$ATAN2 возвращает  число

  с плавающей запятой формата F; процедура MTH$DATAN2 - число

  с плавающей запятой формата D; процедура MTH$GATAN2 - число

  с плавающей запятой формата G; процедура MTH$HATAN2 возвра-

  щает угол в аргументе радиан.









                           - 34 -

                       00152-01 33 09-3


       Аргументы:


       Y

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение

       Механизм: посредством ссылки

       Делимое. Аргумент Y является адресом числа с плавающей

  запятой. Для процедуры MTH$ATAN2 аргумент Y определяет чис-

  ло с плавающей запятой формата F; для процедуры  MTH$DATAN2

  - число  с  плавающей  запятой  формата  D;  для  процедуры

  MTH$GATAN2 - число с плавающей запятой формата G; для  про-

  цедуры MTH$HATAN2 - число с плавающей запятой формата Н.


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение

       Механизм: посредством ссылки

       Делитель. Аргумент Х является адресом числа с  плаваю-

  щей запятой. Для процедуры MTH$ATAN2 аргумент Х  определяет

  число  с  плавающей  запятой  формата  F;   для   процедуры




                           - 35 -

                       00152-01 33 09-3


  MTH$DATAN2 - число с плавающей запятой формата D; для  про-

  цедуры MTH$GATAN2 - число с плавающей  запятой  формата  G;

  для процедуры MTH$HATAN2 - число с плавающей запятой форма-

  та Н.


       Радиан

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством ссылки

       Угол ( в радианах), тангенс которого задан  с  помощью

  (Y/X). Аргумент радиан - адрес числа  с  плавающей  запятой

  формата Н. Аргумент радиан используется  только  процедурой

  MTH$HATAN2.


       Описание.

       Вычисление угла (в радианах), тангенс  которого  равен

  Y/X, приводится в табл. 7.

                                                   Таблица 7

  ----------------------------------------------------------

     Значение вводимых      !     Возвращаемый угол

          аргументов        !

  ----------------------------------------------------------

  Х = 0 или Y/X>2**(F + 1)  ! П/2* (SIGN Y)             (24)

  Х > 0 и Y/X =<2**(F + 1)  ! [Z]ATAN (Y/X)

  Х < 0 и Y/X =<2**(F + 1)  ! П*(SIGN Y)+[Z]ATAN(Y/X)   (25)








                           - 36 -

                       00152-01 33 09-3


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_INVARGMAT

       - неверный  аргумент:  Х  и  Y  равны   0.   Процедура

         LIB$SIGNAL  копирует  зарезервированный  операнд   с

         плавающей  запятой  в   вектор   CHF$L_MCH_SAVR0/R1.

         Результатом  является  зарезервированный  операнд  с

         плавающей запятой, если не  предусмотрена  программа

         обработки исключительного  состояния  для  изменения

         CHF$L_MCH_SAVR0/R1.



       1.8. МTH$[Z]ATAND2   -   арктангенс    угла,

            выраженный   в   градусах,   с    двумя

            аргументами


       Данная процедура вычисляет значение угла (в градусах),

  тангенс которого задан в виде частного Y и Х (Y/X).


       Формат:

       МTH$ATAND2 Y,X

       МTH$DATAND2 Y,X

       МTH$GATAND2 Y,X

       МTH$HATAND2 градус, Y, Х






                           - 37 -

                       00152-01 33 09-3


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Угол (в  градусах).  Процедура  MTH$ATAND2  возвращает

  число с плавающей запятой формата F; процедура  MTH$DATAND2

  - число  с   плавающей   запятой   формата   D;   процедура

  MTH$GATAND2  -  число  с  плавающей  запятой   формата   G;

  процедура MTH$HATAND2 возвращает угол в аргументе градус.


       Аргументы:


       Y

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение

       Механизм: посредством ссылки

       Делимое. Аргумент Y является адресом числа с плавающеи

  запятой. Для процедуры  MTH$ATAND2  аргумент  Y  определяет

  число  с  плавающей  запятой  формата  F;   для   процедуры

  MTH$DATAND2 - число с плавающей запятой формата D; для про-

  цедуры MTH$GATAND2 - число с плавающей запятой  формата  G;




                           - 38 -

                       00152-01 33 09-3


  для процедуры  MTH$HATAND2  -  число  с  плавающей  запятой

  формата Н.


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение

       Механизм: посредством ссылки

       Делитель.  Аргумент  Х  является   адресом   числа   с

  плавающей запятой.  Для  процедуры  MTH$ATAND2  аргумент  Х

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DATAND2 - число с плавающей запятой формата D; для

  процедуры MTH$GATAND2 - число с плавающей  запятой  формата

  G; для процедуры MTH$HATAND2 - число  с  плавающей  запятой

  формата Н.


       Градус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством ссылки

       Угол (в градусах), тангенс которого  задан  с  помощью

  (Y/X). Аргумент градус является адресом числа  с  плавающей

  запятой формата  Н.  Аргумент  градус  используется  только

  процедурой MTH$HATAND2.




                           - 39 -

                       00152-01 33 09-3


       Описание.

       Вычисление угла (в градусах), тангенс  которого  равен

  Y/X, приводится в табл. 8.

                                                   Таблица 8

   ---------------------------------------------------------

   Значение вводимых аргументов !   Возвращаемый угол

   ---------------------------------------------------------

   Х=0 или  Y/X>2**(F+1)        !   90*(SIGN Y)         (26)

   Х>0 и Y/X=<2**(F+1)          !   [Z]ATAND(Y/X)

   Х<0 и Y/X=<2**(F+1)          !   180*(SIGN Y)+

                                !   [Z]ATAND(Y/X)       (27)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированныи операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_INVARGMAT

       - неверный  аргумент:  Y  и  Х  равны   0.   Процедура

         LIB$SIGNAL  копирует  зарезервированныи  операнд   с

         плавающей  запятой  в   вектор   CHF$L_MCH_SAVR0/R1.

         Результатом является  зарезервированнный  операнд  с

         плавающей запятой, если не  предусмотрена  программа

         обработки исключительного  состояния  для  изменения

         CHF$L_MCH_SAVR0/R1.







                           - 40 -

                       00152-01 33 09-3


       1.9. МTH$[Z]ATANH     -      гиперболический

            арктангенс


       Данная процедура вычисляет гиперболическии  арктангенс

  угла, гиперболический тангенс которого задан.


       Формат:

       МTH$ATANH Х

       МTH$DATANH Х

       МTH$GATANH Х

       МTH$HATANH арктангенс,Х


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Гиперболическии  арктангенс  Х.  Процедура   MTH$ATANH

  возвращает число с плавающей запятой формата  F;  процедура

  MTH$DATANH - число с плавающей запятой формата D; процедура

  MTH$GATANH - число с плавающей запятой формата G; процедура

  MTH$HATANH   возвращает   гиперболическии   арктангенс    в

  аргументе арктангенс.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой



                           - 41 -

                       00152-01 33 09-3


       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение

       Механизм: посредством ссылки

       Гиперболический  тангенс  угла.  Аргумент  Х  является

  адресом числа с плавающей запятой. Для процедуры  MTH$ATANH

  аргумент Х определяет число с плавающей запятой формата  F;

  для  процедуры  MTH$DATANH  -  число  с  плавающей  запятой

  формата D; для процедуры MTH$GATANH  -  число  с  плавающей

  запятой формата G;  для  процедуры  MTH$HATANH  -  число  с

  плавающей запятой формата Н.


        Арктангенс

        использование в МОС ВП: число с плавающей запятой

        тип: число с плавающей запятой формата Н

        доступ: только запись

        механизм: посредством ссылки

       Гиперболическии   арктангенс   угла,   гиперболический

  тангенс, которого задан с помощью аргумента Х.  Аргумент  Х

  является адресом  числа  с  плавающей  запятой  формата  Н.

  Аргумент   арктангенс   используется   только    процедурой

  MTH$HATANH.


       Описание.

       Вычисление функции гиперболического арктангенса приво-

  дится в табл.9.




                           - 42 -

                       00152-01 33 09-3


                                                   Таблица 9

   ---------------------------------------------------------

   Значение Х   !        Возвращаемое значение

   ---------------------------------------------------------

   /Х/<1        !  [Z]ATANH(X)=[Z]LOG((X+1)/(X-1))/2    (28)

   /Х/>=1       !  сигнализируется об ошибке MTH$INVARGMAT


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_INVARGMAT

       - неверный  аргумент:  /Х/>=1.  Процедура   LIB$SIGNAL

         копирует зарезервированный операнд с плавающей запя-

         той   в   вектор   CHF$L_MCH_SAVR0/R1.   Результатом

         является зарезервированныи операнд с плавающеи запя-

         той,  если  не  предусмотрена  программа   обработки

         исключительного     состояния     для      изменения

         CHF$L_MCH_SAVR0/R1.



       1.10. МTH$C[Z]ABS   -   абсолютное   значение

             комплексного числа



       Данная   процедура   вычисляет   абсолютное   значение

  комплексного числа (R,I).





                           - 43 -

                       00152-01 33 09-3


       Формат:

       МTH$CABS   комплексное число

       МTH$CDABS  комплексное число

       МTH$CGABS  комплексное число


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Абсолютное  значение  комплексного  числа.   Процедура

  MTH$CABS возвращает число с плавающей  запятой  формата  F;

  процедура MTH$CDABS - число с плавающей запятой формата  D;

  процедура MTH$CGABS - число с плавающей запятой формата G.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное  число  (R,I),  где  R  и  I   комплексные

  величины с плавающей запятой.  Аргумент  комплексное  число

  является адресом данного комплексного числа. Для  процедуры



                           - 44 -

                       00152-01 33 09-3


  MTH$CABS аргумент комплексное число определяет  комплексное

  число  с  плавающей  запятой  формата  F;   для   процедуры

  MTH$CDABS - комплексное число с плавающей  запятой  формата

  D; для процедуры MTH$CGABS - комплексное число с  плавающей

  запятой формата G.


       Описание.

       Абсолютное  значение  комплексного  числа  вычисляется

  следующим образом:

          PEЗУЛЬТАТ=MAX*SQRT(MIN/MAX)**2+1),        (29)

  где мах наибольшее из чисел /R/ и /I/,

      MIN наименьшее из чисел /R/ и /I/,

      SQRT - квадратный корень


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой.


       Пример 1.

  C+

  C   данная программа на языке программирования фортран вы-

  C   числяет абсолютное значение комплексного числа с пла-

  C   вающей запятой, используя процедуру MTH$CABS и генера-

  C   тор псевдослучайных чисел RAN.



                           - 45 -

                       00152-01 33 09-3


  C

  C   об'явить Z - комплексной величиной, а MTH$CABS - значе-

  C   нием REAL*4.Абсолютное значение Z  возврашается:

  C   Z_NEW = MTH$CABS(Z)

  C-

           COMPLEX Z

           COMPLEX CMPLX

           REAL*4 Z_NEW, MTH$CABS

           INTEGER M

           M= 1234567

  C+

  C   сгенерировать комплексное число Z

  C-

           Z=CMPLX(RAN(M),RAN(M))

  C+

  C   Z - комплексное число (R,I) с действительной частью R

  C   и мнимой частью I

  C-

           TYPE *, ' THE COMPLEX NUMBER Z IS',Z

           TYPE *, ' IT HAS REAL PART',REAL(Z),

           'AND IMAGINARY PART',AIMAG(Z)

           TYPE *, ' '

  C+

  C   абсолютное значение комплексного числа Z

  C-

           Z_NEW=MTH$CABS(Z)

           TYPE *,' THE COMPLEX ABSOLUTE VALUE OF',Z,




                           - 46 -

                       00152-01 33 09-3


           'IS',Z_NEW

           END


       Результат выполнения данной программы на  языке  прог-

  раммирования фортран следующий:

     THE COMPLEX NUMBER Z IS (0,8535407;0,2043402)

     IT HAS REAL PART 0,8535407 AND IMAGINARY PART 0,2043402

     THE COMPLEX ABSOLUTE VALUE OF

     (0,8535407;0,2043402) IS 0,8776597


       Пример 2.

  C+

  C    данная программа на языке программирования фортран вы-

  C    числяет абсолютное значение комплексного числа с пла-

  C    вающей запятой формата G, используя процедуру

  C    MTH$CGABS и генератор псевдослучайных чисел RAN

  C

  C    об'явить Z - комплексной величиной, MTH$CGABS

  C    - REAL*8. Абсолютное значение Z возвращается:

  C     Z_NEW = MTH$CGABS(Z)

  C-

                   COMPLEX*16 Z

                   REAL*8 Z_NEW,MTH$CGABS

  C+

  C    сгенерировать комплексное число Z

  C-

                   Z=(12,34567890123;45,536376385345)

                   TYPE *, 'THE COMPLEX NUMBER Z IS',Z




                           - 47 -

                       00152-01 33 09-3


                   TYPE *, ''

        C+

        C     абсолютное значение Z

        C-

                   Z_NEW=MTH$CGABS(Z)

        TYPE *,'THE COMPLEX ABSOLUTE VALUE OF',Z,'IS',Z_NEW

        END


       Результат выполнения данной программы следующии:

        THE COMPLEX NUMBER Z IS (12,3456789012300;

        45,5363763853450)

        THE COMPLEX ABSOLUTE VALUE OF (12,3456789012300;

        45,5363763853450) IS 47,1802645376230



       1.11. МTH$C[Z]COS- комплексный косинус



       Данная   процедура   вычисляет   комплексный   косинус

  комплексного числа.


       Формат:

       МTH$CCOS комплексное число

       МTH$CDCOS косинус, комплексное число

       МTH$CGCOS косинус, комплексное число


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения



                           - 48 -

                       00152-01 33 09-3


       Комплексный  косинус  введенного  комплексного  числа.

  Процедура MTH$CCOS возвращает комплексное число с плавающей

  запятой формата F; процедура MTH$CDCOS - комплексное  число

  с  плавающей  запятой  формата  D  в   аргументе   косинус;

  процедура MTH$CGCOS - число с плавающей запятой формата G в

  аргументе косинус.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное число (R,I), где R и I числа  с  плавающей

  запятой. Аргумент комплексное число является адресом данно-

  го комплексного  числа.  Для  процедуры  MTH$CCOS  аргумент

  комплексное число определяет комплексное число с  плавающей

  запятой формата F; для процедуры  MTH$CDCOS  -  комплексное

  число  с  плавающей  запятой  формата  D;   для   процедуры

  MTH$CGCOS - комплексное число с плавающей  запятой  формата

  G.


       Косинус

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G



                           - 49 -

                       00152-01 33 09-3


        доступ: только запись

        механизм: посредством ссылки

       Комплексный косинус комплексного числа. Аргумент коси-

  нус является адресом комплексного косинуса.  Для  процедуры

  MTH$CDCOS аргумент косинус определяет комплексное  число  с

  плавающей  запятой  формата  D;  для  процедуры  MTH$CGCOS-

  комплексное число с плавающей запятой формата G. Для проце-

  дуры MTH$CCOS аргумент косинус не используется.


       Описание.

       Комплексный косинус вычисляется следующим образом:

       РEзульTAT=(COS(R)*COSH(I), - SIN(R)*SINH(I))     (30)

       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH_FLOOVEMAT

       - переполнение  сверху  чисел  с  плавающей   запятой:

         /I/>88,029 для чисел с плавающей запятой форматов  F

         и D или /I/>709,089 для чисел  с  плавающей  запятой

         формата G.


       Пример 1.

  C+

  C   данная программа на языке программирования фортран вы-

  C   числяет косинус комплексных чисел с плавающей запятой




                           - 50 -

                       00152-01 33 09-3


  C   формата F, используя процедуру MTH$CCOS и генератор

  C   псевдослучайных чисел RAN

  C

  C   об'явить Z и MTH$CCOS комплексными величинами.

  C   значение косинуса Z возвращается:

  C   Z_NEW=MTH$CCOS(Z)

  C-

           COMPLEX Z,Z_NEW,MTH$CCOS

           COMPLEX CMPLX

           INTEGER M

           M = 1234567

  C+

  C   сгенерировать комплексное число Z

           Z=CMPLX(RAN(M),RAN(M))

  C+

  C   Z - комплексное число (R,I) с действительной частью

  C   R и мнимой частью I

  C-

           TYPE *,'THE COMPLEX NUMBER Z IS',Z

           TYPE *,'IT HAS REAL PART',REAL(Z),

           'AND IMAGINARY PART',AIMAG(Z)

           TYPE *,''

  C+

  C     комплексный косинус числа Z

  C-

           Z_NEW=MTH$CCOS(Z)

           TYPE *,'THE COMPLEX COSINE VALUE OF',




                           - 51 -

                       00152-01 33 09-3


           Z,'IS',Z_NEW

           END


       Результат выполнения данной программы следующий:

  THE COMPLEX NUMBER Z IS (0,8535407;0,2043402)

  IT HAS REAL PART 0,8535407 AND IMAGINARY PART 0,2043402

  THE COMPLEX COSINE VALUE OF (0,8535407;0,2043402)

  IS (0,6710899;-0,1550672)


       Пример 2.


  C+

  C   данная программа на языке программирования фортран вы-

  C   числяет комплексный косинус комплексного числа с пла-

  C   вающей запятой формата D, используя процедуру MTH$CDCOS

  C   и генератор псевдослучайных чисел RAN

  C

  C   об'явить Z и процедуру MTH$CDCOS комплексными величина-

  C   ми. Значение косинуса Z возвращается:

  C   Z_NEW=MTH$CDCOS(Z)

  C-

           COMPLEX*16 Z,Z_NEW,MTH$CDCOS

           COMPLEX*16 DCMPLX

           INTEGER M

           M= 1234567

  C+

  C   сгенерировать комплексное число Z

  C-

           Z=CMPLX(RAN(M),RAN(M))



                           - 52 -

                       00152-01 33 09-3


  C+

  C   Z - комплексное число (R,I) с действительной частью R

  C   и мнимой частью I

  C-

           TYPE *, 'THE COMPLEX NUMBER Z IS',Z

           TYPE *, ''

  C+

  C   значение комплексного косинуса

  C-

           Z_NEW=MTH$CDCOS(Z)

           TYPE *,'THE COMPLEX COSINE VALUE OF',

           Z,'IS',Z_NEW

           END


       Результат выполнения данной программы следующий:

  THE COMPLEX NUMBER Z IS (0,8535407185554504;

  0,2043401598930359)

  THE COMPLEX COSINE VALUE OF(0,8535407185554504;

  0,2043401598930359) IS (0,6710899028500762;

  -0,15506720119621661)



       1.12. МTH$C[Z]EXP - комплексная экспонента



       Данная  процедура  возвращает  комплексную  экспоненту

  комплексного числа.









                           - 53 -

                       00152-01 33 09-3


       Формат:

       MTH$CEXP  комплексное число

       МTH$CDEXP экспонента, комплексное число

       МTH$CGEXP экспонента, комплексное число


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Комплексная экспонента введенного комплексного  числа.

  Процедура мтн$ехр возвращает комплексное число с  плавающей

  запятой   формата   F;   процедура   MTH$CDEXP   возвращает

  комплексное число с плавающей запятой формата D в аргументе

  экспонента;  процедура  MTH$CGEXP  возвращает   комплексное

  число с плавающей запятой формата G в аргументе экспонента.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное  число.  Комплексное  число  имеет   форму

  (R,I), где R - действительная часть и  I  -  мнимая  часть.

  Аргумент  комплексное  число   является   адресом   данного



                           - 54 -

                       00152-01 33 09-3


  комплексного  числа.  Для   процедуры   мтн$сехр   аргумент

  комплексное число определяет комплексное число с  плавающей

  запятой формата F; для процедуры  MTH$CDEXP  -  комплексное

  число  с  плавающей  запятой  формата  D;   для   процедуры

  MTH$CGEXP - комплексное число с плавающей  запятой  формата

  G.


       Экпонента

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством ссылки

       Комплекная  экспонента.   Процедуры,   которые   имеют

  входные комплексные значения с плавающей запятой форматов D

  и  G   записывают   комплексную   экспоненту   в   аргумент

  комплексное число. Для процедуры MTH$CDEXP аргумент  экспо-

  нента определяет  комплексное  число  с  плавающей  запятой

  формата D; для процедуры MTH$CGEXP -  комплексное  число  с

  плавающей запятой формата G; для процедуры MTH$CCEHP  аргу-

  мент экспонента не используется.


       Описание.

       Комплексная экспонента вычисляется следующим образом:


        ЭKCПOHEHTA=(EXP(R)*COS(I),EXP(R)*SIN(I))      (31)









                           - 55 -

                       00152-01 33 09-3


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH_FLOOVEMAT

       - переполнение  сверху  чисел  с  плавающей   запятой:

         /R/>88,029 для величин с плавающей запятой  форматов

         F и D или /R/>709,089 для величин с плавающей  запя-

         той формата G.


       Пример 1.

  C+

  C  данная программа на языке программирования фортран вы-

  C  числяет комплексную экспоненту комплексного числа с пла-

  C  вающей запятой формата F, используя процедуру мтн$сехр

  C  и генератор псевдослучайных чисел RAN.

  C

  C  об'явить Z и MTH$CEXP комплексными величинами. Значение

  C  экспоненты Z возвращается: Z_NEW=MTH$CEXP(Z)

  C-

                  COMPLEX Z,Z_NEW,MTH$CEXP

                  COMPLEX CMPLX

                  INTEGER M

                  M= 1234567

  C+

  C  генератор псевдослучайных чисел порождает CMPLX.



                           - 56 -

                       00152-01 33 09-3


  C-

                  Z=CMPLX(RAN(M),RAN(M))

  C+

  C  Z - комплексное число(R,I) с действительной частью R и

  C  мнимой частью I.

  C-

                  TYPE *,' THE COMPLEX NUMBER Z IS',Z

                  TYPE *,'IT HAS REAL PART',REAL(Z),

                  'AND IMAGINARY PART',AIMAG(Z)

                  TYPE *, ''

  C+

  C  вычисление значения комплексной экспоненты

  C-

                Z_NEW=MTH$CEXP(Z)

                TYPE *, 'THE COMPLEX EXPONENTIAL VALUE OF',

                Z,'IS',Z_NEW

                END    


       Результат выполнения данной программы следующий:


       THE COMPLEX NUMBER Z IS (0,8535407;0,204340)

       IT HAS REAL PART 0,8535407 AND IMAGINARY PART

       0,2043402

       THE COMPLEX EXPONENTIAL VALUE OF (0,8535407;0,2043402)

       IS (0,299097;0,4764476)










                           - 57 -

                       00152-01 33 09-3


       Пример 2.

  C+

  C   данная программа на языке программирования фортран вы-

  C   числяет комплексную экспоненту комплексного числа с

  C   плавающей запятой формата G, используя процедуру

  C   MTH$CGEXP и генератор псевдослучайных чисел RAN.

  C

  C   об'явить Z и MTH$CGEXP комплексными величинами. Значе-

  C   ние экспоненты Z возвращается: CALL MTH$CGEXP(Z_NEW,Z)

  C-

                  COMPLEX*16 Z,Z_NEW

                  COMPLEX*16 MTH$GCMPLX

                  REAL*8 R,I

                  INTEGER M

                  M=1234567

  C+

  C   генератор псевдослучайных чисел порождает CMPLX

  C-

                  R=RAN(M)

                  I=RAN(M)

                  Z=MTH$GCMPLX(R,I)

                  TYPE *,'THE COMPLEX NUMBER Z IS',Z

                  TYPE *,''

  C+

  C   вычисление значения экспонеты Z

  C-

                  CALL MTH$CGEXP(Z_NEW,Z)




                           - 58 -

                       00152-01 33 09-3


                  TYPE *, 'THE COMPLEX EXPONENTIAL VALUE OF',

                  Z,'IS',Z_NEW

                  END

       Результат выполнения данной программы следующий:


        THE COMPLEX NUMBER Z IS (0,853540718555450;

        0,204340159893036)

        THE COMPLEX EXPONENTIAL VALUE OF (0,853540718555450;

        0,204340159893036) IS(2,29909677719458;

        0,476447678044977)



       1.13. МTH$C[Z]LOG -  комплексный  натуральный

             логарифм


       Данная  процедура  вычисляет  комплексный  натуральный

  логарифм комплексного числа.


       Формат:

       МTH$CLOG комплексное число

       МTH$CDLOG логарифм, комплексное число

       МTH$CGLOG логарифм, комплексное число


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Комплексный натуральный логарифм  комплексного  числа.

  Процедура MTH$CLOG возвращает комплексное число с плавающей




                           - 59 -

                       00152-01 33 09-3


  запятой  формата  F;  процедура  MTH$CDLOG   -   возвращает

  комплексное число с плавающей запятой формата D в аргументе

  логарифм.  Процедура  MTH$CGLOG  -  возвращает  комплексное

  число с плавающей запятой формата G в аргументе логарифм.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное  число.  Комплексное  число  имеет   форму

  (R,I), где R- действительная  часть,  а  I-  мнимая  часть.

  Аргумент  комплексное  число   является   адресом   данного

  комплексного  числа.  Для   процедуры   MTH$CLOG   аргумент

  комплексное число  определяет  число  с  плавающей  запятой

  формата F; для  процедуры  MTH$CDLOG  аргумент  комплексное

  число определяет  комплексное  число  с  плавающей  запятой

  формата D; для  процедуры  MTH$CGLOG  аргумент  комплексное

  число определяет  комплексное  число  с  плавающей  запятой

  формата G.


       Логарифм

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G



                           - 60 -

                       00152-01 33 09-3


       Доступ: только запись

       Механизм: посредством ссылки

       Натуральный логарифм комплексного числа. Для процедуры

  MTH$CDLOG аргумент логарифм определяет комплексное число  с

  плавающей запятой формата D; для процедуры MTH$CGLOG  аргу-

  мент логарифм  определяет  комплексное  число  с  плавающей

  запятой формата G; для процедуры MTH$CLOG аргумент логарифм

  не используется.


       Описание.

       Комплексный натуральный логарифм вычисляется следующим

  образом:

        CLN(X)=(LN(CABS(X)), ATAN2(I,R))            (32)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.


       Пример.

  C+

  C   данная программа на языке программирования фортран вы-

  C   числяет комплексный логарифм, используя процедуру

  C   MTH$CDLOG и генератор псевдослучайных чисел RAN

  C

  C   об'явить Z и MTH$CDLOG как комплексные величины.

  C   значение логарифма возвращается:



                           - 61 -

                       00152-01 33 09-3


  C   CALL MTH$CDLOG(Z_NEW,Z)

  C

  C   описать Z, Z_LOG, и MTH$DCMPLX как комплекные величины,

  C   R и I как действительные величины. МTH$DCMPLX берет два

  C   действительных аргумента и возвращает одно комплексное

  C   число

  C

  C   процедура MTH$CDLOG возвращает комплексный нату-

  C   ральный логарифм данного комплексного числа Z

  C-

              COMPLEX*16 Z,Z_NEW,MTH$DCMPLX

              REAL*8 R,I

              R = 3,1425637846746565

              I = 7,43678469887

              Z = MTH$DCMPLX(R,I)

  C+

  C   Z - комплексное число (R,I) с действительной частью R

  C   и мнимой частью I

  C-

             TYPE *, 'THE COMPLEX NUMBER Z IS', Z

             TYPE *, ' '

             CALL MTH$CDLOG(Z_NEW,Z)

             TYPE *,' THE COMPLEX LOGARITHM OF',Z,' IS',Z_NEW

             END


       Результат выполнения данной программы следующий:

      THE COMPLEX NUMBER Z IS (3,142563784674657;

      0,436784698870000)



                           - 62 -

                       00152-01 33 09-3


      THE COMPLEX LOGARITHM OF (3,142563784674657;

      7,436784698870000) IS (2,088587642177504;

      1,170985519274141)



       1.14. МTH$[Z]CMPLX   -   комплексное   число,

             составленное  из  чисел   с   плавающей

             запятой



       Данная процедура возвращает комплексное число из  двух

  введенных значений с плавающей запятой.


       Формат:

       МTH$CMPLX  действительная часть, мнимая часть

       МTH$DCMPLX комплексное число, действительная

                  часть, мнимая часть

       МTH$GCMPLX комплексное число, действительная

                  часть, мнимая часть


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Комплексное  число.  Процедура  MTH$CMPLX   возвращает

  комплексное число с плавающей запятой формата F;  процедура

  MTH$DCMPLX возвращает комплексное число с плавающей запятой

  формата  D  в  аргументе   комплексное   число;   процедура

  MTH$GCMPLX возвращает комплексное число с плавающей запятой




                           - 63 -

                       00152-01 33 09-3


  формата G в аргументе комплексное число.


       Аргументы:


       Действительная часть

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Ме6;ханизм: посредством ссылки

       Действительная  часть  комплексного  числа.   Аргумент

  действительная часть является  адресом  числа  с  плавающей

  запятой. Для процедуры  MTH$CMPLX  аргумент  действительная

  часть определяет число с плавающей запятой формата  F;  для

  процедуры MTH$DCMPLX - число с плавающей запятой формата D;

  для  процедуры  MTH$GCMPLX  -  число  с  плавающей  запятой

  формата G.


       Мнимая часть

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством ссылки

       Мнимая часть комплексного числа. Аргумент мнимая часть

  является адресом числа с плавающей запятой.  Для  процедуры

  MTH$CMPLX  аргумент  мнимая  часть   определяет   число   с



                           - 64 -

                       00152-01 33 09-3


  плавающей запятой формата F;  для  процедуры  MTH$DCMPLX  -

  число  с  плавающей  запятой  формата  D;   для   процедуры

  MTH$GCMPLX - число с плавающей запятой формата G.


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством ссылки

       Значение комплексного числа с плавающей  запятой.  Для

  процедуры MTH$DCMPLX аргумент комплексное число  определяет

  комплексное число с плавающей запятой формата D; для проце-

  дуры MTH$GCMPLX - комплексное  число  с  плавающей  запятой

  формата G; для  процедуры  MTH$CMPLX  аргумент  комплексное

  число не используется.


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.


       Пример 1.

  C+

  C   данная программа на языке программирования фортран фор-

  C   мирует комплексное число с плавающей запятой формата F,

  C   используя процедуру MTH$CMPLX и генератор псевдослу-



                           - 65 -

                       00152-01 33 09-3


  C   чайных чисел RAN.

  C

  C   описать Z и MTH$CMPLX как комплексные величины, R и I

  C   как действительные величины. МTH$CMPLX берет два дейст-

  C   вительных значения с плавающей запятой формата F и

  C   возвращает число COMPLEX*8

  C

  C   CMPLX должно быть описано как величина COMPLEX*8

  C

  C         Z = CMPLX(R,I)

  C-

               COMPLEX Z,MTH$CMPLX,CMPLX

               REAL*4 R,I

               INTEGER M

               M = 1234567

               R = RAN(M)
                         

               I = RAN(M)

               Z = MTH$CMPLX(R,I)

  C+

  C    Z - комплексное число (R,I) с действительной

  C    частью R и мнимой частью I

  C-

               TYPE *, ' THE TWO INPUT VALUES ARE:',R,I

               TYPE *, ' THE COMPLEX NUMBER Z IS',Z

               Z = CMPLX(RAN(M),RAN(M))

               TYPE *, ' '

               TYPE *, 'USING THE FORTRAN GENERIC CMPLX




                           - 66 -

                       00152-01 33 09-3


               WITH RANDOM R AND I:'

               TYPE *, ' THE COMPLEX NUMBER Z IS',Z

               END


       Результат выполнения данной программы следующий:

       THE TWO INPUT VALUES ARE: 0,8535407  0,2043402

       THE COMPLEX NUMBER Z IS (0,8535407;0,2043402)

       USING тне FORTRAN GENERIC CMPLX WITH RANDOM R AND I:

       THE COMPLEX NUMBER Z IS (0,5722565;0,1857677)


       Пример 2.

  C+

  C   данная программа на языке программирования фортран фор-

  C   мирует два комплексных числа с плавающей запятой форма-

  C   та F, используя процедуру MTH$CMPLX и генератор псевдо-

  C   случайных чисел RAN

  C

  C   описать Z и MTH$DCMPLX как комплексные величины, R и I

  C   как действительные величины. МTH$DCMPLX берет два

  C   действительных значения с плавающей запятой формата D и

  C   возвращает число COMPLEX*16

  C-

              COMPLEX*16 Z

              REAL*8 R,I

              INTEGER M

              M = 1234567

              R = RAN(M)

              I = RAN(M)




                           - 67 -

                       00152-01 33 09-3


              CALL MTH$DCMPLX(Z,R,I)

  C+

  C   Z - комплексное число (R,I) с действительной частью R

  C   и мнимой частью I

  C-

              TYPE *, ' THE TWO INPUT VALUES ARE:',R,I

              TYPE *, 'THE COMPLEX NUMBER Z IS',Z

              END

         
       Результат выполнения данной программы:


       THE TWO INPUT VALUES ARE:

       0,8535407185554504   0,2043401598930359

       THE COMPLEX NUMBER Z IS (0,8535407185554504;

       0,2043401598930359)



       1.15. МTH$[Z]CONJG - сопряжение  комплексного

             числа



       Данная  процедура  возвращает  комплексное  сопряжение

  (R,-I) комплексного числа (R,I).


       Формат:

       МTH$CONJG  комплексное число

       МTH$DCONJG сопряжение, комплексное число

       МTH$GCONJG сопряжение, комплексное число









                           - 68 -

                       00152-01 33 09-3


       Код возврата:

       Использование МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Комплексное сопряжение комплексного  числа.  Процедура

  MTH$CONJG возвращает комплексное число с плавающей  запятой

  формата F; процедура MTH$DCONJG возвращает комплексное чис-

  ло с плавающей запятой формата D  в  аргументе  сопряжение;

  процедура MTH$GCONJG возвращает комплексное число с плаваю-

  щей запятой формата G в аргументе сопряжение.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

        доступ: только чтение

        механизм: посредством ссылки

       Комплексное число (R,I), где R и I - числа с плавающей

  запятой. Аргумент комплексное число является адресом данно-

  го комплексного числа с плавающеи  запятой.  Для  процедуры

  MTH$CONJG аргумент комплексное  число  определяет  число  с

  плавающей запятой формата F;  для  процедуры  MTH$DCONJG  -




                           - 69 -

                       00152-01 33 09-3


  число  с  плавающей  запятой  формата  D;   для   процедуры

  MTH$GCONJG - число с плавающей запятой формата G.


       Сопряжение

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством ссылки

       Комплексное сопряжение (R,-I) комплексного числа.  Для

  процедуры MTH$DCONJG аргумент сопряжение  определяет  адрес

  комплексного числа с плавающей запятой формата D; для  про-

  цедуры  MTH$GCONJG  аргумент  сопряжение  определяет  адрес

  комплексного числа с плавающей запятой формата G; для  про-

  цедуры MTH$CONJG аргумент сопряжение не используется.


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.


       Пример.

  C+

  C   данная программа на языке программирования фортран вы-

  C   числяет комплексное сопряжение, используя процедуру

  C   MTH$GCONJG и генератор псевдослучайных чисел RAN

  C



                           - 70 -

                       00152-01 33 09-3


  C   описать Z, Z_NEW и MTH$CCONJG как комплексные величины.

  C   MTH$GCONJG возвратит комплексное сопряжение комплексно-

  C   го Z: Z_NEW = MTH$GCONJG(Z)

  C-

               COMPLEX*16 Z,Z_NEW,MTH$GCONJG

               COMPLEX*16 MTH$GCMPLX

               REAL*8 R,I,MTH$GREAL,MTH$GIMAG

               INTEGER M

               M = 1234567

  C+

  C   генератор псевдослучайных чисел порождает CMPLX

  C-

            R = RAN(M)

            I = RAN(M)

            Z = MTH$GCMPLX(R,I)

            TYPE *,'THE COMPLEX NUMBER Z IS',Z

            TYPE 1,MTH$GREAL(Z),MTH$GIMAG(Z)

            FORMAT(' WITH REAL PART ',F20,16,' AND IMAGINARY

            PART ',F20,16)

            TYPE *, ' '

  C+

  C   вычислить абсолютное комплексное значение Z

  C-

            Z_NEW = MTH$GCONJG(Z)

            TYPE *, ' THE COMPLEX CONJUGATE VALUE OF',Z,

                 'IS',Z_NEW

            TYPE 1,MTH$GREAL(Z_NEW),MTH$GIMAG(Z_NEW)




                           - 71 -

                       00152-01 33 09-3


            END


       Результат выполнения данной программы:

  THE COMPLEX NUMBER Z IS (0,853540718555450;

  0,204340159893036)

  WITH REAL PART 0,8535407185554504 AND IMAGINARY PART

  0,2043401598930359



  THE COMPLEX CONJUGATE VALUE OF (0,853540718555450;

  0,204340159893036) IS (0,853540718555450;

  -0,204340159893036)

  WITH REAL PART 0,8535407185554504 AND IMAGINARY PART

  -0,2043401598930359



       1.16. МTH$[Z]COS - косинус угла,  выраженного

             в радианах


       Данная процедура возвращает косинус данного угла  (  в

  радианах ).


       Формат:

       МTH$COS X

       МTH$DCOS X

       МTH$GCOS X

       МTH$HCOS косинус,X


       Точки входа JSB:

       МTH$COS_R4

       МTH$DCOS_R7




                           - 72 -

                       00152-01 33 09-3


       МTH$GCOS_R7

       МTH$HCOS_R5


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Косинус угла. Процедура  MTH$COS  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DCOS -  число  с

  плавающей запятой формата D; процедура MTH$GCOSD - число  с

  плавающей запятой формата G; процедура  MTH$HCOS  возвращет

  косинус в аргументе косинус.


       Аргументы:


       Х

       Использование МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата G,

            число с плавающей запятой формата D,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Угол в радианах. Аргумент х является адресом  числа  с

  плавающей запятой. Для процедуры MTH$COS аргумент х - число

  с плавающей запятой формата F;  для  процедуры  MTH$DCOS  -



                           - 73 -

                       00152-01 33 09-3


  число с плавающей запятой формата D; для процедуры MTH$GCOS

  - число  с  плавающей  запятой  формата  G;  для  процедуры

  MTH$HCOS - число с плавающей запятой формата H.


       Косинус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Косинус угла. Аргумент косинус является адресом  числа

  с   плавающей   запятой   формата   H.   Аргумент   косинус

  используется только процедурой MTH$HCOS.


       Описание.

       Алгоритм вычисления косинуса (подраздел 1.31)


       Сигнализируемые значения состояния:

  SS$ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.



       1.17. МTH$[Z]COSD - косинус угла, выраженного

             в градусах


       Данная процедура вычисляет косинус заданного  угла  (в

  градусах).






                           - 74 -

                       00152-01 33 09-3


       Формат:

       МTH$COSD  X

       МTH$DCOSD X

       МTH$GCOSD X

       МTH$HCOSD косинус, X


       Точки входа JSB:

       МTH$COSD_R4

       МTH$DCOSD_R7

       МTH$GCOSD_R7

       МTH$HCOSD_R5


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип:  число с плавающей запятой формата F,

             число с плавающей запятой формата D,

             число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Косинус угла. Процедура MTH$COSD  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DCOSD - число  с

  плавающей запятой формата D; процедура MTH$GCOSD - число  с

  плавающей запятой формата G; процедура MTH$HCOSD возвращает

  косинус угла в аргументе косинус.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой




                           - 75 -

                       00152-01 33 09-3


       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Угол (в градусах). Аргумент X является адресом числа с

  плавающей  запятой.  Для  процедуры  MTH$COSD  аргумент   X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DCOSD - число с плавающей запятой формата  D;  для

  процедуры MTH$GCOSD - число с плавающей запятой формата  G;

  для процедуры MTH$HCOSD - число с плавающей запятой формата

  H.


        Косинус

        использование в МОС ВП: число с плавающей запятой

        тип: число с плавающей запятой формата H

        доступ: только запись

        механизм: посредством ссылки

       Косинус угла. Аргумент косинус является адресом  числа

  с   плавающей   запятой   формата   H.   Аргумент   косинус

  используется только процедурой MTH$HCOSD.


       Описание.

       Алгоритм вычисления косинуса (подраздел 1.32).


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд



                           - 76 -

                       00152-01 33 09-3


         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.



       1.18. МTH$[Z]COSH - гиперболический косинус


       Данная  процедура  вычисляет  гиперболический  косинус

  введенного значения.


       Формат:

       МTH$COSH  X

       МTH$DCOSH X

       МTH$GCOSH X

       МTH$HCOSH  косинус, X


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Гиперболический   косинус   введенного   значения   X.

  Процедура MTH$COSH возвращает  число  с  плавающей  запятой

  формата F; процедура MTH$DCOSH - число с плавающей  запятой

  формата D; процедура MTH$GCOSH - число с плавающей  запятой

  формата G; процедура MTH$HCOSH  возвращает  гиперболический

  косинус в аргументе косинус.





                           - 77 -

                       00152-01 33 09-3


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством значения

       Введенное  значение.  Аргумент  X   является   адресом

  введенного значения.  Для  процедуры  MTH$COSH  аргумент  X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DCOSH - число с плавающей запятой формата  D;  для

  процедуры MTH$GCOSH - число с плавающей запятой формата  G;

  для процедуры MTH$HCOSH - число с плавающей запятой формата

  H.


       Косинус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Гиперболический косинус введенного значения.  Аргумент

  косинус является адресом числа с плавающей запятой  формата

  H.  Аргумент   косинус   используется   только   процедурой

  MTH$HCOSH.






                           - 78 -

                       00152-01 33 09-3


       Описание.

       Вычисление гиперболического косинуса зависит от  абсо-

  лютного  значения  введенного  аргумента.  Данное  значение

  может находиться в одном из диапазонов. Для каждого из диа-

  пазонов существует своя формула вычисления гиперболического

  косинуса, границы диапазона определяются с помощью констант

  A(Z), B(Z), C(Z), D(Z). Константы зависят от типа данных  и

  определяются посредством числа битов порядка  (E)  и  числа

  битов дробной части (F).

       Зависимость E и F от типа данных приведена в табл.10.

                                                  Таблица 10

  ----------------------------------------------------------

            Z      !       E        !         F

  ----------------------------------------------------------

            F      !       8        !        24

            D      !       8        !        56

            G      !      11        !        53

            H      !      15        !       113



       Значения констант, в зависимости от чисел F и E,  при-

  ведены в табл.11.
















                           - 79 -

                       00152-01 33 09-3


                                                  Таблица 11

   ---------------------------------------------------------

    Константа      !          Значение

   ---------------------------------------------------------

       А(Z)        !  2**(-F/2)                     (33)

                   !                         1)

       В(Z)        !  CEILING[(F+1)/2*LN(2)]        (34)

                   !               2)

                   !  (F+1)/2*LN(2)                 (35)

       С(Z)        !  (2**(E-1)-1)*LN(2)            (36)

       D(Z)        !  C(Z)+LN(2)                    (37)

   --------------------------

       1) для чисел с плавающей запятой форматов F, D, G;

       2) для чисел с плавающей запятой формата H.


       Вычисление  гиперболического   косинуса   показано   в

  табл.12.

                                                  Таблица 12

   ---------------------------------------------------------

   Значение Х      !   Возвращаемое значение

   ---------------------------------------------------------

    /X/<A(Z)       ! 1

    A(Z)=</X/<0,25 ! Вычисляется с использованием расширения

                   ! степенного ряда /Х/**2

    0,25=</X/<B(Z) ! ([Z]EXP(/X/)+1/[Z]EXP(/X/))/2      (38)

    B(Z)=</X/<C(Z) ! [Z]EXP(/X/)/2                      (39)

    C(Z)=</X/<D(Z) ! [Z]EXP(/X/-LN(2))                  (40)




                           - 80 -

                       00152-01 33 09-3


                                        Продолжение табл. 12

   ---------------------------------------------------------

   Значение Х      !   Возвращаемое значение

   ---------------------------------------------------------

    D(Z)=</X/      ! Переполнение сверху чисел с плавающей

                   ! запятой


  Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_FLOOVEMAT

       - переполнение  сверху  чисел  с  плавающей   запятой:

         /X/>YYY;     процедура      LIB$SIGNAL      копирует

         зарезервированный  операнд  с  плавающей  запятой  в

         вектор  CHF$L_MCH_SAVR0/R1.   Результатом   является

         зарезервированный  операнд,  если  не  предусмотрена

         программа обработки  исключительного  состояния  для

         изменения вектора CHF$L_MCH_SAVR0/R1.

         Значения YYY следующие:

         - MTH$COSH  - 88,722;

         - MTH$DCOSH - 88,722;

         - MTH$GCOSH - 709,782;

         - MTH$HCOSH - 11356,523.







                           - 81 -

                       00152-01 33 09-3


       1.19. МTH$C[Z]SIN   -    комплексный    синус

             комплексного числа


       Данная   процедура   вычисляет    комплексный    синус

  комплексного числа (R,I).


       Формат:

       МTH$CSIN   комплексное число

       МTH$CDSIN   синус, комплексное число

       МTH$CGSIN   синус, комплексное число


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Комплексный  синус   комплексного   числа.   Процедура

  MTH$CSIN возвращает комплексное число с  плавающей  запятой

  формата F. Процедура MTH$CDSIN возвращает комплексное число

  с плавающей запятой формата D в аргументе синус;  процедура

  MTH$CGSIN возвращает комплексное число с плавающей  запятой

  формата G в аргументе синус.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G



                           - 82 -

                       00152-01 33 09-3


       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное число (R,I), где R и I - числа с плавающей

  запятой. Аргумент комплексное число является адресом данно-

  го комплексного  числа.  Для  процедуры  MTH$CSIN  аргумент

  комплексное число определяет комплексное число с  плавающей

  запятой формата F; для процедуры  MTH$CGSIN  -  комплексное

  число  с  плавающей  запятой  формата  G;   для   процедуры

  MTH$CDSIN - комплексное число с плавающей  запятой  формата

  D.


       Синус

       Использование в МОС ВП: число с плавающей запятой

       Тип:  число с плавающей запятой формата D,

             число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством ссылки

       Комплексный  синус   комплексного   числа.   Процедуры

  комплексного синуса, имеющие входные комплексные значения в

  формате D и  G,  записывают  адрес  комплексного  синуса  в

  аргумент синус . Для  процедуры  MTH$CDSIN  аргумент  синус

  определяет комплексное число с плавающей запятой формата D.

  Для процедуры MTH$CGSIN -  комплексное  число  с  плавающей

  запятой формата G. Для процедуры MTH$CSIN аргумент синус не

  используется.









                           - 83 -

                       00152-01 33 09-3


       Описание.

       Комплексный синус вычисляется следующим образом:


       СиHуC=(SIN(R)*COSH(I), COS(R)*SINH(I))         (41)


       Сигнализируемые значения состояния:

  SS$ROPRAND

       - зарезервированный операнд. Зарезервировано для даль-

         нейшего использования. Зарезервированный  операнд  с

         плавающей запятой представляет  собой  отрицательный

         нуль (-0.0);

  MTH$FLOOVEMAT

       - переполнение  сверху  чисел  с  плавающей   запятой:

         /I/>88,029 для значений с плавающей запятой форматов

         F и D или /I/>709.089 для значений с плавающей запя-

         той формата G.


       Пример.


  С+

  C данная программа на языке программирования фортран вычис-

  C ляет комплексный синус комплексного числа с плавающей за-

  C пятой формата G, используя процедуру  MTH$CGSIN и генера-

  C тор псевдослучайных чисел RAN

  C

  C Z и Z_NEW описываются как комплексные величины.

  C-

        COMPLEX*16 Z,Z_NEW

        COMPLEX*16 DCMPLX




                           - 84 -

                       00152-01 33 09-3


        REAL*8 R,I

        INTEGER M

        M = 1234567

  C+

  C сгенерировать случайное комплексное число

  C-

        R = RAN(M)

        I = RAN(M)

        Z = DCMPLX(R,I)

  C+

  C Z - комплексное число (R,I) с действительной частью R и

  C мнимой частью I

  C-

        TYPE *, ' THE COMRLEX NUMBER Z IS' , Z

        TYPE *, ' '

  C+

  C вычислить значение комплексного синуса Z

  C-

       СALL MTH$CGSIN(Z_NEW, Z)

       ТYPE *, ' THE COMPREX SINE VALUE OF' , Z, ' IS', Z_NEW

       ЕND


       Результат выполнения данной программы следующий:


        THE COMPLEX NUMBER Z IS (0,853540718555450;

        0,204340159893036)

        THE COMPLEX SINE VALUE OF (0,853540718555450;

        0,204340159893036) IS




                           - 85 -

                       00152-01 33 09-3


        (0,769400835484975; 0,135253340912255)



       1.20. МTH$C[Z]SQRT -  комплексный  квадратный

             корень


       Данная  процедура  вычисляет  комплексный   квадратный

  корень комплексного числа (R,I).


       Формат:

       МTH$CSQRT  комплексное число

       МTH$CDSQRT квадратный корень, комплексное число

       МTH$CGSQRT квадратный корень, комплексное число


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Комплексный  квадратный  корень  комплексного   числа.

  Процедура MTH$CSQRT возвращает комплексное число с  плаваю-

  щей запятой  формата  F;  процедура  MTH$CDSQRT  возвращает

  комплексное число с плавающей запятой формата D в аргументе

  квадратный   корень;   процедура   MTH$CGSQRT    возвращает

  комплексное число с плавающей запятой формата G в аргументе

  квадратный корень.


       Аргументы:


       Комплексное число





                           - 86 -

                       00152-01 33 09-3


       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное число (R,I).  Аргумент  комплексное  число

  содержит адрес данного комплексного  числа.  Для  процедуры

  MTH$CSQRT аргумент комплексное  число  определяет  число  с

  плавающей запятой формата F;  для  процедуры  MTH$CDSQRT  -

  число  с  плавающей  запятой  формата  D;   для   процедуры

  MTH$CGSQRT - число с плавающей запятой формата G.


       Квадратный корень

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством ссылки

       Комплексный  квадратный  корень  комплексного   числа.

  Процедуры комплексного квадратного корня,  имеющие  входные

  комплексные значения с плавающей запятой форматов  D  и  G,

  записывают комплексный квадратный корень в  аргумент  квад-

  ратный корень: для процедуры MTH$CDSQRT - комплексное число

  с плавающей запятой формата D; для процедуры  MTH$CGSQRT  -

  комплексное  число  с  плавающей  запятой  формата  G.  Для

  процедуры   MTH$CSQRT   аргумент   квадратный   корень   не

  используется.



                           - 87 -

                       00152-01 33 09-3


       Описание.

       Алгоритм  вычисления  комплексного  квадратного  корня

  приводится в табл.13.

                                                  Таблица 13

   ---------------------------------------------------------

   Значение R ! Значение I !     Возвращаемое значение

   ---------------------------------------------------------

              !            !         1)

     R >=0    !   Любое    !  (ROOT,Q)

              !            !         1)

     R <0     !   I>=0     !  (Q,ROOT)

              !            !          1)

     R  <0    !   I<0      !  (-Q,-ROOT)

   --------------------

       1) ROOT = SQRT((ABS(R)+(CABS((R,I)))/2),          (42)

          Q = 1/(2*ROOT)                                 (43)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.


       Пример.


  C+

  C данная программы на языке программирования фортран вычис-

  C ляет комплексный квадратный корень комплексного числа с



                           - 88 -

                       00152-01 33 09-3


  C плавающей запятой формата D, используя процедуру

  C MTH$CDSQRT и генератор псевдослучайных чисел RAN

  C

  C описать Z и Z_NEW как комплексные величины.

  C MTH$CDSQRT возвращает комплексный квадратный корень:

  C CALL MTH$CDSQRT(Z_NEW,Z).

  C-

        COMPLEX*16 Z,Z_NEW

        COMPLEX*16 DCMPLX

        INTEGER M

        M= 1234567

  C+

  C сгенерировать случайное комплексное число

  C-

        Z= DCMPLX(RAN(M),RAN(M))

  C+

  C Z-KOMплEKCHOE число (R,I) с действительной частью R и

  C мнимой частью I

  C-

        TYPE *, ' THE COMPLEX NUMBER Z IS',Z

        TYPE *, ' '

  C+

  C вычислить комплексный квадратный корень Z

  C-

        CALL MTH$CDSQRT(Z_NEW,Z)

        TYPE *, ' THE COMPLEX SQUARE ROOT OF',

        Z,' IS',Z_NEW




                           - 89 -

                       00152-01 33 09-3


        END


       Результат выполнения данной программы:


        THE COMPLEX NUMBER Z IS (0,8535407185554504;

                            (0,2043401598930359)

        THE COMPLEX SQUARE ROOT OF (0,8535407185554504;

                             0,2043401598930359) IS

        (0,9303763973040062; 0,1098158554550485)



       1.21. МTH$CVT[Z]_[Z]     -     преобразование

             величины с удвоенной точностью


       Процедуры  MTH$CVT_D_G   и   MTH$CVT_G_D   преобразуют

  величину с удвоенной точностью в назначенный тип  данных  и

  возвращают  результат  как  значение   функции.   Процедура

  MTH$CVT_D_G  преобразует  значение  с   плавающей   запятой

  формата D в значение  с  плавающей  запятой  формата  G,  а

  процедура  MTH$CVT_G_D  преобразует  значение  с  плавающей

  запятой формата G в значение с плавающей запятой формата D.
             

       Формат:

       МTH$CVT_D_G  величина

       МTH$CVT_G_D  величина


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата G,

            число с плавающей запятой формата D

       Доступ: только запись



                           - 90 -

                       00152-01 33 09-3


       Механизм: посредством значения

       Преобразованное   значение.   Процедура    MTH$CVT_D_G

  преобразует  значение  с  плавающей  запятой  формата  D  в

  значение  с  плавающей   запятой   формата   G.   Процедура

  MTH$CVT_G_D  преобразует  значение  с   плавающей   запятой

  формата G в значение с плавающей запятой формата D.


       Аргументы:


       Величина

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Преобразуемое  значение.  Аргумент  величина  является

  адресом  данного  значения.   Для   процедуры   MTH$CVT_D_G

  аргумент величина  определяет  число  с  плавающей  запятой

  формата D;  для  процедуры  MTH$CVT_G_D  аргумент  величина

  определяет число с плавающей запятой формата G.


       Описание.

       Данные   процедуры    выполняются    как    инструкции

  преобразования.


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный




                           - 91 -

                       00152-01 33 09-3


         нуль (-0,0);

  MTH$FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  MTH$FLOUNDMAT

       - переполнение снизу чисел с плавающей запятой.



       1.22. МTH$CVT_[Z]A_[Z]A   -    преобразование

             массива величин с удвоенной точностью


       Процедуры MTH$CVT_DA_GA  и  MTH$CVT_GA_DA  преобразуют

  массив величин с  удвоенной  точностью  в  назначенный  тип

  данных  и  возвращают  результат  как   массив.   Процедура

  MTH$CVT_DA_GA  преобразует  величины  с  плавающей  запятой

  формата  D  в  величины  с  плавающей  запятой  формата  G.

  Процедура MTH$CVT_GA_DA преобразует  величины  с  плавающей

  запятой формата G в величины с плавающей запятой формата D.


       Формат:

       МTH$CVT_DA_GA  величина1, величина 2 [, счетчик]

       МTH$CVT_GA_DA  величина1, величина 2 [, счетчик]


       Код возврата:

       Процедуры  MTH$CVT_DA_GA  и  MTH$CVT_GA_DA  возвращают

  адрес выходного массива в аргументе величина 2.


       Аргументы:


       Величина 1

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата D,



                           - 92 -

                       00152-01 33 09-3


            число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки, массива ссылок

       Массив  преобразуемых  значений.  Аргумент   величина1

  является адресом массива чисел  с  плавающей  запятой.  Для

  процедуры MTH$CVT_DA_GA аргумент величина1 определяет  мас-

  сив чисел с плавающей  запятой  формата  D.  Для  процедуры

  MTH$CVT_GA_DA аргумент величина1 определяет массив чисел  с

  плавающей запятой формата G.


       Величина 2

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата G,

            число с плавающей запятой формата D

       Доступ: только запись

       Механизм: посредством ссылки, массива ссылок

       Массив преобразованных  значений.  Аргумент  величина2

  является адресом массива чисел  с  плавающей  запятой.  Для

  процедуры MTH$CVT_DA_GA аргумент величина2 определяет  мас-

  сив чисел с плавающей  запятой  формата  G.  Для  процедуры

  MTH$CVT_GA_DA аргумент величина2 определяет массив чисел  с

  плавающей запятой формата D.


       Счетчик

       Использование в МОС ВП: длинное слово со знаком

       Тип: длинное слово (со знаком) целое

       Доступ: только чтение

       Механизм: посредством ссылки




                           - 93 -

                       00152-01 33 09-3


       Число элементов массива. По умолчанию, устанавливается

  1. Аргумент счетчик является адресом числа элементов.


       Описание.

       Данные   процедуры    выполняются    как    инструкции

  преобразования.


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0);

  MTH$_FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  MTH$_FLOUNDMAT

       - переполнение снизу чисел с плавающей запятой.



       1.23. МTH$[Z]EXP - экспонента


       Данная  процедура  возвращает  экспоненту   введенного

  значения.


       Формат:

       МTH$EXP  X

       МTH$DEXP X

       МTH$GEXP X

       MTH$HEXP экспонента, X








                           - 94 -

                       00152-01 33 09-3


       Точки входа JSB:

       МTH$EXP_R4

       МTH$DEXP_R6

       МTH$GEXP_R6

       МTH$HEXP_R6


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Экспонента X. Процедура  мтн$ехр  возвращает  число  с

  плавающей запятой формата F. Процедура MTH$DEXP -  число  с

  плавающей запятой формата D. Процедура MTH$GEXP -  число  с

  плавающей  запятой  формата   G.   Процедура   мтн$нехр   -

  возвращает экспоненту в аргумент экспонента.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки



                           - 95 -

                       00152-01 33 09-3


       Введенное значение. Аргумент X является адресом  числа

  с плавающей  запятой.  Для  процедуры  мтн$ехр  аргумент  X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DEXP - число с плавающей запятой  формата  D;  для

  процедуры MTH$GEXP - число с плавающей запятой  формата  G;

  для процедуры MTH$HEXP - число с плавающей запятой  формата

  H.


       Экспонента

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Экспонента введенного значения X. Аргумент  экспонента

  является адресом  числа  с  плавающей  запятой  формата  H.

  Аргумент   экспонента   используется   только    процедурой

  MTH$HEXP.


       Описание.

       Вычисление экспоненты приводится в табл.14.

                                                   Таблица 14

  -----------------------------------------------------------

  Значение X     !      Возвращаемое значение

  -----------------------------------------------------------

          1)     !

  X>C(Z)         ! Переполнение сверху

              2) !

  X < =- D(Z)    ! 0




                           - 96 -

                       00152-01 33 09-3


                                         Продолжение табл. 14

  -----------------------------------------------------------

  Значение Х     !      Возвращаемое значение

  -----------------------------------------------------------

  /X/ <2**-(F+1) ! 1

  Другие         ! 2**Y*2**U*2**W,                       (44)

                 ! где Y= INTEGER(X*LN2(E)),

                 !     U = INTEGER(V)/16,

                 !     V = FRAC(X*LN2(E))*16,

                 !     W = FRAC(V)/16,

                 !     2**W = полиномное приближение сте-

                 !            пеней 4, 8, 8, 14 для

                 !            Z = F,D,G и Н

  ----------------------------

       1) описание C(Z) (подраздел 1.18);

       2) описание D(Z) (см. подраздел 1.18).


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0).

  МTH$_FLOOVEMAT

       - переполнение сверху чисел  с  плавающей  запятой:  X

         больше чем YYY;  процедура  MTH$SIGNAL  переписывает

         зарезервированный  операнд  с  плавающей  запятой  в

         вектор  CHF$L_MCH_SAVR0/R1.   Результатом   является

         зарезервированный операнд (-0,0), если не предусмот-



                           - 97 -

                       00152-01 33 09-3


         рена программа обработки  исключительного  состояния

         для изменения  вектора  CHF$L_MCH_SAVR0/R1  значения

         YYY следующие:

       - для процедуры MTH$EXP - 88,029;

       - для процедуры MTH$DEXP - 88,029;

       - для процедуры MTH$GEXP - 709,089;

       - для процедуры MTH$HEXP - 11355,830.

  МTH$FLOUNDMAT

       - переполнение снизу  чисел  с  плавающей  запятой:  X

         меньше или равен YYY. Значения YYY следующие:

       - для процедуры мтн$ехр - (-88,722);

       - для процедуры MTH$DEXP - (-88,722);

       - для процедуры MTH$GEXP - (-709,774);

       - для процедуры MTH$HEXP - (-11356,523).


       Пример.

  IDENTIFICATION DIVISION.

  РROGRAM-ID.    FLOATING_POINT.

  *

  *  вызовы MTH$EXP, используют числа с плавающей запятой

  *  вызовы MTH$DEXP, используют числа с плавающей запятой

  *  удвоенной точности

  *

  ENVIRONMENT DIVISION.

  DATA DIVISION.

  WORKING-STORAGE SECTION.

  01 FLOAT_PT     COMP-1.

  01 ANSWER_F     COMP-1.



                           - 98 -

                       00152-01 33 09-3


  01 DOUBLE_PT    COMP-2.

  01 ANSWER_D     COMP-2.

  РROCEDURE DIVISION.

  PO.

        МOVE 12,34 TO FLOAT_PT.

        МOVE 3,456 TO DOUBLE_PT.

        СALL "MTH$EXP" USING BY REFERENGE FLOAT_PT GIVING

        ANSWER_F.

        DISPLAY " MTH$EXP OF ", FLOAT_PT CONVERSION, " IS ",

        ANSWER_F CONVERSION.

        СALL "MTH$DEXP" USING BY REFERENGE DOUBLE_PT GIVING

        ANSWER_D.

        DISPLAY " MTH$DEXP OF ",DOUBLE_PT CONVERSION, "IS ",

        ANSWER_D CONVERSION.

        STOP RUN.

       Результат выполнения данной программы следующий:


        MTH$EXP OF 1,234000е+01 IS 2,286620E+05

        MTH$DEXP OF 3,456000000000000E+00 IS

        3,168996280537917E+01



       1.24. МTH$[Z]IMAG - мнимая часть комплексного

             числа


       Данная процедура возвращает мнимую часть  комплексного

  числа.








                           - 99 -

                       00152-01 33 09-3


       Формат:

       МTH$AIMAG   комплексное число

       МTH$DIMAG   комплексное число

       МTH$GIMAG   комплексное число


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип:число с плавающей запятой формата F,

           число с плавающей запятой формата D,

           число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Мнимая часть введенного комплексного числа.  Процедура

  MTH$AIMAG возващает число с плавающей  запятой  формата  F;

  процедура MTH$DIMAG - число с плавающей запятой формата  D;

  процедура MTH$GIMAG - число с плавающей запятой формата G.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное число. Аргумент комплексное число является

  адресом комплексного числа с плавающей запятой. Для  проце-

  дуры MTH$AIMAG аргумент комплексное число определяет  число



                           - 100 -

                       00152-01 33 09-3


  с плавающей запятой формата F; для  процедуры  MTH$DIMAG  -

  комплексное число с плавающей запятой формата D; для проце-

  дуры MTH$GIMAG -  комплексное  число  с  плавающей  запятой

  формата G.


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         представляет собой отрицательный нуль (-0,0).  Заре-

         зервировано для дальнейшего использования.


       Пример.

  C+

  C  данная программа на языке программирования фортран фор-

  C  мирует мнимую часть комплексного числа с плавающей запя-

  C  той формата G, используя процедуру MTH$GIMAG и генератор

  C  псевдослучайных чисел RAN.

  C

  C  описать Z как комплексную величину, процедуру MTH$GIMAG

  C  как величину REAL*8. Процедура MTH$GIMAG возвратит мни-

  C  мую часть Z: Z_NEW = MTH$GIMAG

        COMPLEX*16 Z

        COMPLEX*16 DCMPLX

        REAL*8 R, I, MTH$GIMAG

        INTEGER M

        M = 1234567

  C+

  C  сгенерировать случайное комплексное число.




                           - 101 -

                       00152-01 33 09-3


  C-

        R = RAN (M)

        I = RAN (M)

        Z = DCMPLX (R, I)

  C+

  C  Z - комплексное число (R,I) с действительной частью R и

  C  мнимой частью I

  C-

        TYPE * 'THE COMPLEX NUMBER Z IS ' , Z

        TYPE * ' IT HAS IMAGINARY PART ' ,MTH$GIMAG(Z)

        END

       Результат выполнения данной программы:


      THE COMPLEX NUMBER Z IS

      (0,8535407185554504;0,2043401598930359)

      IT HAS IMAGINARY PART 0,2043401598930359



       1.25. МTH$[Z]LOG - натуральный логарифм


       Данная  процедура   вычисляет   натуральный   логарифм

  введенного аргумента.


       Формат:

       МTH$ALOG X

       МTH$DLOG X

       МTH$GLOG X

       МTH$HLOG логарифм, X







                           - 102 -

                       00152-01 33 09-3


       Точки входа JSB:

       МTH$ALOG_R5

       МTH$DLOG_R8

       МTH$GLOG_R8

       МTH$HLOG_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Натуральный логарифм X. Процедура MTH$ALOG  возвращает

  число с плавающей запятой формата F; процедура  MTH$DLOG  -

  число с плавающей запятой формата D; процедура  MTH$GLOG  -

  число с плавающей запятой  формата  G;  процедура  MTH$HLOG

  возвращает натуральный логарифм в аргументе логарифм.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки



                           - 103 -

                       00152-01 33 09-3


       Введеное значение. Аргумент х является адресом числа с

  плавающей  запятой.  Для  процедуры  MTH$ALOG  аргумент   X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DLOG - число с плавающей запятой  формата  D;  для

  процедуры MTH$GLOG - число с плавающей запятой  формата  G;

  для процедуры MTH$HLOG - число с плавающей запятой  формата

  н.


       Логарифм

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Натуральный логарифм  X.  Аргумент  логарифм  является

  адресом числа с плавающей запятой формата H. Аргумент лога-

  рифм используется только процедурой MTH$HLOG.


       Описание.

       Вычисление   натурального   логарифма   основано    на

  следующих формулах:


       1) LN(X*Y) = LN(X) + LN(Y);                      (45)

       2) для /X/<1

       LN(1+X) = X-X**2/2+х**3/3-х**4/4...;             (46)

       3) LN(X) = LN (A)+2*(V+V**3/3+V**5/5+V**7/7..)   (47)

                = LN (A) + V*P(V**2),

  где V = (X-A)/(X+A),

      A > 0,

      P(Y)= 2*(1+Y/3+Y**2/5...)



                           - 104 -

                       00152-01 33 09-3


       Для  X=2**N*R,  где  N  -  целое  и  R  от  0,5  до  1

  включительно, определены следующие величины:


        если N>= 1, тогда M = N-1 и F = 2*R

        если N = <0, тогда M = N и F = R

        из формулы (45) следует:

        LN(X) = M*LN(2) + LN(F)                        (48)

       Натуральный логарифм вычисляется следующим образом:


      если /F-1/<2**(-5), то

      [Z]LOG (X) = M * [Z]LOG (2) + W + W * P(W),     (49)

      где W = F-1;

      иначе

      [Z]LOG(X) = M*[Z]LOG(2) + [Z]LOG(A) + + V*P(V**2), (50)

      где V = (F-A)/(F+A),

          P(V) = 2*(1+Y/3+Y**2/5+...).


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0);

  MTH$_LOGZERNEG

       - логарифм нуля или отрицательного значения:  аргумент

         X  меньше  или  равен  (0,0).  Процедура  LIB$SIGNAL

         переписывает зарезервированный операнд  с  плавающей

         запятой  в  вектор  CHF$L_MCH_SAVR0/R1.  Результатом

         будет зарезервированный операнд с плавающей запятой,

         если   не    предусмотрена    программа    обработки



                           - 105 -

                       00152-01 33 09-3


         исключительного     состояния     для      изменения

         CHF$L_MCH_SAVR0/R1.



       1.26. МTH$[Z]LOG2 - логарифм по основанию 2


       Данная процедура вычисляет  логарифм  по  основанию  2

  введенного значения.


       Формат:

       МTH$ALOG2 X

       МTH$DLOG2 X

       МTH$GLOG2 X

       МTH$HLOG2 логарифм, X


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Логарифм по основанию  2  от  X.  Процедура  MTH$ALOG2

  возвращает число с плавающей запятой формата  F;  процедура

  MTH$DLOG2 - число с плавающей запятой формата D;  процедура

  MTH$GLOG2 - число с плавающей запятой формата G;  процедура

  MTH$HLOG2 возвращает логарифм по основанию  2  в  аргументе

  логарифм.







                           - 106 -

                       00152-01 33 09-3


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Введенное значение. Аргумент X является адресом  числа

  с плавающей запятой. Для  процедуры  MTH$ALOG2  аргумент  X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DLOG2 - число с плавающей запятой формата  D;  для

  процедуры MTH$GLOG2 - число с плавающей запятой формата  G;

  для процедуры MTH$HLOG2 - число с плавающей запятой формата

  H.


       Логарифм

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Логарифм по основанию 2.  Аргумент  логарифм  является

  адресом числа с плавающей запятой формата H. Аргумент лога-

  рифм используется только процедурой MTH$HLOG2.








                           - 107 -

                       00152-01 33 09-3


       Описание.

       Логарифм по основанию 2 вычисляется следующим образом:


       [Z]LOG2(X) = [Z]LOG2(E)*[Z]LOG(X)              (51)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезерврованный операнд. Зарезервированный  операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_LOGZERNEG

       - логарифм нуля или отрицательного значения:  аргумент

         X  меньше  или  равен  (0,0).  Процедура  LIB$SIGNAL

         переписывает зарезервированный операнд  с  плавающей

         запятой  в  вектор  CHF$L_MCH_SAVR0/R1.  Результатом

         будет зарезервированный операнд с плавающей запятой,

         если   не    предусмотрена    программа    обработки

         исключительного     состояния     для      изменения

         CHF$L_MCH_SAVR0/R1.



       1.27. МTH$[Z]LOG10 - десятичный логарифм


       Данная  процедура  вычисляет  десятичный  логарифм  от

  введенного аргумента.


       Формат:

       МTH$ALOG10 X

       МTH$DLOG10 X




                           - 108 -

                       00152-01 33 09-3


       МTH$GLOG10 X

       МTH$HLOG10 логарифм, X
                   

       Точки входа JSB:

       МTH$ALOG10_R5

       МTH$DLOG10_R8

       МTH$GLOG10_R8

       МTH$HLOG10_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Десятичный логарифм X. Процедура MTH$ALOG10 возвращает

  число с плавающей запятой формата F; процедура MTH$DLOG10 -

  число с плавающей запятой формата D; процедура MTH$GLOG10 -

  число с плавающей запятой формата G;  процедура  MTH$HLOG10

  возвращает десятичный логарифм в аргументе логарифм.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,




                           - 109 -

                       00152-01 33 09-3


            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Введенное значение. Аргумент х является адресом  числа

  с плавающей запятой. Для процедуры  MTH$ALOG10  аргумент  X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DLOG10 - число с плавающей запятой формата D;  для

  процедуры MTH$GLOG10 - число с плавающей запятой формата G;

  для  процедуры  MTH$HLOG10  -  число  с  плавающей  запятой

  формата H.


        Логарифм

        использование в МОС ВП: число с плавающей запятой

        тип: число с плавающей запятой формата H

        доступ: только запись

        механизм: посредством ссылки

       Десятичный  логарифм  введенного  значения.   Аргумент

  логарифм является адресом числа с плавающей запятой формата

  H.  Аргумент  логарифм   используется   только   процедурой

  MTH$HLOG10.


       Описание.

       Десятичный логарифм вычисляется следующим образом:


        [Z]LOG10(X) = [Z]LOG10(E)*[Z]LOG(X)             (52)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд




                           - 110 -

                       00152-01 33 09-3


         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_LOGZERNEG

       - логарифм нуля или отрицательной величины: аргумент X

         меньше  или  равен   (0,0).   Процедура   LIB$SIGNAL

         переписывает зарезервированный операнд  с  плавающей

         запятой  в  вектор  CHF$L_MCH_SAVR0/R1.  Результатом

         является зарезервированный операнд с плавающей запя-

         той,  если  не  предусмотрена  программа   обработки

         исключительного     состояния     для      изменения

         CHF$L_MCH_SAVR0/R1.



       1.28. МTH$PANDOM - генератор  псевдослучайных

             чисел


       Данная процедура является генератором  псевдослучайных

  чисел.


       Формат:

        MTH$RANDOM  начальное число


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Процедура MTH$RANDOM возвращает псевдослучайное  число

  с плавающей запятой формата F.



                           - 111 -

                       00152-01 33 09-3


       Аргументы:


       Начальное число

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово ( без знака )

       Доступ: только чтение

       Механизм: посредством ссылки

       Целое  32-битное  число,  старшие  24  бита   которого

  преобразуются процедурой MTH$RANDOM в псевдослучайное число

  с плавающей запятой формата  F.  Аргумент  начальное  число

  является адресом длинного слова без знака. Начальное  число

  изменяется с каждым вызовом MTH$RANDOM.


       Описание.

       Данная процедура  должна  быть  вызвана  повторно  для

  получения  следующего  псевдослучайного  числа.   Начальное

  число задается автоматически.

       Результатом является  величина  с  плавающей  запятой,

  равномерно распределенная в интервале [0,0:1,0]

       Для начального числа нет никаких ограничений. Процеду-

  ра  MTH$RANDOM  использует  следующий  метод  для   задания

  начального числа:


        начальное число = (69069 * начальное число

                          + 1) (MOD 2**32)              (53)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд




                           - 112 -

                       00152-01 33 09-3


         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.


       Пример.

  RAND:     PROCEDURE OPTIONS (MAIN):

  DECLARE FOR$SECNDS ENTRY (FLOAT BINARY (24))

                RETURNS (FLOAT BINARY (24));

  DECLARE MTH$RANDOM ENTRY (FIXED BINARY (31))

                RETURNS (FLOAT BINARY (24));

  DECLARE TIME FLOAT BINARY (24);

  DECLARE SEED FIXED BINARY (31);

  DECLARE I FIXED BINARY (7);

  DECLARE RESULT FIXED DECIMAL (2);

            /*GET FLOATING RANDOM TIME VALUE       */

  TIME = FOR$SECNDS (0е0);

            /* CONVERT TO FIXED                    */

  SEED = TIME;

         /* GENERATE 100 RANDOM NUMBERS BETWEEN 1 AND 10 */

  DO I = 1 TO 100;

         RESULT = 1 + FIXED ((10е0 * MTH$RANDOM (SEED)),31);

         PUT LIST (RESULT);

         END;

  END RAND;

       Данная  программа  использует  процедуру   MTH$RANDOM.

  Возвращаемая случайная величина:







                           - 113 -

                       00152-01 33 09-3


  7  4  6  5  9 10   5  5  3  8  8  1  3  1  3  2

  4  4  2  4  4  8   3  8  9  1  7  1  8  6  9 10

  1 10 10  6  7  3   2  2  1  2  6  6  3  9  5  8

  6  2  3  6  10 8   5  5  4  2  8  5  9  6  4  2

  8  5  4  9  8  7   6  6  8 10  9  5  9  4  5  7

  1  2  2  3  6  5   2  2  3  4  4  8  9  2  8  5

  3  8  1  5



       1.29. МTH$[Z]REAL  -   действительная   часть

             комплексного числа


       Данная процедура возвращает действительную часть комп-

  лексного числа.


       Формат:

        MTH$REAL   комплексное число

        MTH$DREAL  комплексное число

        MTH$GREAL  комплексное число


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Действительная  часть  комплексного  числа.  Процедура

  MTH$REAL возвращает число с плавающей  запятой  формата  F;

  процедура MTH$DREAL - число с плавающей запятой формата  D;



                           - 114 -

                       00152-01 33 09-3


  процедура MTH$GREAL - число с плавающей запятой формата G.


       Аргументы:


       Комплексное число

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством ссылки

       Комплексное  число,  действительная   часть   которого

  возвращается процедурой MTH$REAL. Аргумент комплексное чис-

  ло является адресом комплексного числа с плавающей запятой.

  Для процедуры MTH$REAL аргумент комплексное  число  опреде-

  ляет число с плавающей запятой  формата  F;  для  процедуры

  MTH$REAL - число с плавающей запятой формата D; для  проце-

  дуры MTH$GREAL - число с плавающей запятой формата G.


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей точкой представляет собой  отрицательный

         нуль (0,0). Зарезервировано для дальнейшего  исполь-

         зования.


       Пример.

  C+

  C  данная программа на яыке программирования фортран форми-




                           - 115 -

                       00152-01 33 09-3


  C  рует действительную часть комплексного числа с плавающей

  C  запятой формата F, используя процедуру MTH$REAL и гене-

  C  ратор псевдослучайных чисел RAN.

  C

  C  описать Z как комплексную величину, а процедуру MTH$REAL

  C  как REAL*4. Процедура MTH$REAL возвратит действительную

  C  часть Z

  C -

        COMPLEX Z

        COMPLEX CMPLX

        REAL*4 MTH$REAL

        INTEGER M

        M = 1234567

  C+

  C  сгенерировать случайное комплексное число.

  C -

        Z = CMPLX(RAN(M), RAN(M))

  C+

  C  Z - комплексное число (R,I) с действительной частью R и

  C  мнимой частью I.

  С-

        TYPE *, 'THIS COMPLEX NUMBER Z IS', Z

        TYPE *, ' IT HAS REAL PART', MTH$REAL(Z)

        END

       Результат выполнения данной программы:


        THE COMPLEX NUMBER Z IS (0,8535407;0,2043402)

        IT HAS REAL PART  0,8535407



                           - 116 -

                       00152-01 33 09-3


       1.30. МTH$[Z]SIN - синус угла, выраженного  в

             радианах


       Данная процедура вычисляет синус данного угла.


       Формат:

       МTH$SIN  X

       МTH$DSIN X

       МTH$GSIN X

       МTH$HSIN синус,X


       Точки входа JSB:

       МTH$SIN_R4

       МTH$DSIN_R7

       МTH$GSIN_R7

       МTH$HSIN_R5


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Синус  угла.  Процедура  MTH$SIN  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DSIN  возвращает

  число с плавающей запятой  формата  D;  процедура  MTH$GSIN

  возвращает число с плавающей запятой формата  G.  Процедура

  MTH$HSIN возвращает синус в аргументе синус.




                           - 117 -

                       00152-01 33 09-3


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Угол (в радианах). Аргумент X является адресом числа с

  плавающей  запятой.  Для  процедуры  MTH$SIN   аргумент   X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DSIN - число с плавающей запятой  формата  D;  для

  процедуры MTH$HSIN - число с плавающей запятой формата н.


       Синус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Синус угла. Аргумент синус является  адресом  числа  с

  плавающей запятой формата H.  Аргумент  синус  используется

  только процедурой MTH$HSIN.


       Описание.

       Алгоритм вычисления синуса (см. подраздел 1.31)







                           - 118 -

                       00152-01 33 09-3


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.



       1.31. МTH$[Z]SINCOS - синус и  косинус  угла,

             выраженного в радианах


       Данная процедура вычисляет  синус  и  косинус  данного

  угла.


       Формат:

       МTH$SINCOS  X, синус, косинус

       МTH$DSINCOS X, синус, косинус

       МTH$GSINCOS X, синус, косинус

       МTH$HSINCOS X, синус, косинус


       Точки входа JSB:

       МTH$SINCOS_R5

       МTH$DSINCOS_R7

       МTH$GSINCOS_R7

       МTH$HSINCOS_R7


       Код возврата:

       Процедуры   MTH$SINCOS,   MTH$DSINCOS,    MTH$GSINCOS,

  MTH$HSINCOS возвращают синус и косинус  введенного  угла  в

  аргументах синус и косинус.




                           - 119 -

                       00152-01 33 09-3


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Угол  (в   радианах),   синус   и   косинус   которого

  возвращается. Аргумент х является адресом числа с плавающей

  запятой. Для процедуры  MTH$SINCOS  аргумент  X  определяет

  число  с  плавающей  запятой  формата  F;   для   процедуры

  MTH$DSINCOS - число с плавающей запятой формата D; для про-

  цедуры MTH$GSINCOS - число с плавающей запятой  формата  G;

  для процедуры  MTH$HSINCOS  -  число  с  плавающей  запятой

  формата H.


       Синус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата н

       Доступ: только запись

       Механизм: посредством ссылки

       Синус угла. Аргумент синус является  адресом  числа  с




                           - 120 -

                       00152-01 33 09-3


  плавающей запятой. Процедура MTH$SINCOS записывает число  с

  плавающей запятой формата F  в  аргумент  синус;  процедура

  MTH$DSINCOS записывает число с плавающей запятой формата  D

  в аргумент синус; процедура MTH$GSINCOS записывает число  с

  плавающей запятой формата G  в  аргумент  синус;  процедура

  MTH$HSINCOS записывает число с плавающей запятой формата  H

  в аргумент синус.


       Косинус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Косинус угла. Аргумент косинус является адресом  числа

  с плавающей  запятой.  Процедура  MTH$SINCOS  записывает  в

  аргумент косинус число с плавающей запятой формата F;  про-

  цедура MTH$DSINCOS - число с плавающей запятой  формата  D;

  процедура MTH$GSINCOS - число с плавающей  запятой  формата

  G; процедура MTH$HSINCOS - число с плавающей запятой форма-

  та H.


       Описание.

       Все процедуры  с  точками  входа  JSB  принимают  один

  аргумент в R0...RM. Зависимость M от типа данных  приведена

  в табл.15.




                           - 121 -

                       00152-01 33 09-3


                                                  Таблица 15

   ---------------------------------------------------------

       Тип данных                          !     M

   ---------------------------------------------------------

   Число с плавающей запятой формата F     !     0

   Число с плавающей запятой формата G     !     1

   Число с плавающей запятой формата D     !     1

   Число с плавающей запятой формата Н     !     3


       Процедура MTH$SINCOS возвращает два значения. Синус  X

  возвращается  в  R0...RM,  а  косинус  X   возвращается   в

  (R<M+1>...R<2*M+1>).

       Вычисление синуса и  косинуса  основано  на  следующих

  формулах:


       1) SIN(X) = X-X**3/(3!) + X**5/(5!) - X**7/(7!)...

                 = X+X*P(X**2),                          (54)

  где P(Y)=Y/(3!)+Y**2/(5!)+Y**3/(7!)...;

          COS(X) =1-X**2/(2!)+X**4/(4!)-х**6/(6!)...

                 =Q(X**2),                               (55)

  где Q(Y)=(1-Y/(2!)+Y**2/(4!)+Y**3/(6!)...)

       2) если /X/<2**(-F/2), тогда

          [Z]SIN(X) = X и [Z]COS(X)=1;

       3) если 2**(-F/2) = </X/< П/4, тогда

          [Z]SIN(X) = X + P(X**2);                       (56)

  где P(Y)=Y/(3!)+Y**2/(5!)+Y**3/(7!)...;

          [Z]COS(X) = Q(X**2),                           (57)

  где Q(Y)=(1-Y/(2!)+Y**2/(4!)+Y**3/(6!)...)




                           - 122 -

                       00152-01 33 09-3


       4) если П/4 = </X/ и X>0, тогда

          допустим J = INT(X/(П/4)), I = J (MOD 8),

          если  J четное, то Y = X-J*(П/4),

          в противном случае, Y = (J + 1)*(П/4)-Х.

       В табл.16 приведена зависимость  SIN(X)  и  COS(X)  от

  [Z]SIN(Y) и [Z]COS(Y).

                                                  Таблица 16

   ---------------------------------------------------------

    Значения I   !   [Z]SIN(Y)   !    [Z]COS(X)

   ---------------------------------------------------------

     0           !   [Z]SIN(Y)   !    [Z]COS(Y)

     1           !   [Z]COS(Y)   !    [Z]SIN(Y)

     2           !   [Z]COS(Y)   ! -  [Z]SIN(Y)

     3           !   [Z]SIN(Y)   ! -  [Z]COS(Y)

     4           ! - [Z]SIN(Y)   ! -  [Z]COS(Y)

     5           ! - [Z]COS(Y)   ! -  [Z]SIN(Y)

     6           ! - [Z]COS(Y)   !    [Z]SIN(Y)

     7           ! - [Z]SIN(Y)   !    [Z]COS(Y)



          [Z]SIN(Y) и [Z]COS(Y) вычисляются следующим образом

          [Z]SIN(Y) = Y + P(Y**2)                (58)

          [Z]COS(Y) = Q(Y**2)                    (59)

       5) если П/4=</X/ и X<0,

          тогда [Z]SIN(X)=[Z]SIN(X)              (60)

          [Z]COS(X) = [Z]COS(/X/)                (61)








                           - 123 -

                       00152-01 33 09-3


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль. Зарезервировано для дальнейшего использования.



       1.32. МTH$[Z]SINCOSD - синус и косинус  угла,

             выраженного в градусах


       Данная процедура вычисляет  синус  и  косинус  данного

  угла.


       Формат:

       МTH$SINCOSD  X, синус, косинус

       МTH$DSINCOSD X, синус, косинус

       МTH$GSINCOSD X, синус, косинус

       МTH$HSINCOSD X, синус, косинус


       Точки входа JSB:

       МTH$SINCOSD_R5

       МTH$DSINCOSD_R7

       МTH$GSINCOSD_R7

       МTH$HSINCOSD_R7


       Код возврата:

       Процедуры  MTH$SINCOSD,  MTH$DSINCOSD,   MTH$GSINCOSD,

  MTH$HSINCOSD возвращает синус и косинус введенного  угла  в

  аргументы синус и косинус.






                           - 124 -

                       00152-01 33 09-3


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Угол (в градусах). Аргумент X является адресом числа с

  плавающей запятой. Для  процедуры  MTH$SINCOSD  -  число  с

  плавающей запятой формата F; для процедуры  MTH$DSINCOSD  -

  число  с  плавающей  запятой  формата  D;   для   процедуры

  MTH$GSINCOSD - число с плавающей  запятой  формата  G;  для

  процедуры MTH$HSINCOSD - число с плавающей запятой  формата

  H.


       Синус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Синус угла. Аргумент синус является  адресом  числа  с

  плавающей запятой. Процедура MTH$SINCOSD записывает в аргу-




                           - 125 -

                       00152-01 33 09-3


  мент синус число с плавающей запятой формата  F;  процедура

  MTH$DSINCOSD - число с плавающей запятой формата D;  проце-

  дура MTH$GSINCOSD - число с плавающей  запятой  формата  G;

  процедура MTH$HSINCOSD - число с плавающей запятой  формата

  H.


       Косинус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Косинус угла. Аргумент косинус является адресом  числа

  с плавающей запятой. Процедура MTH$SINCOSD записывает число

  в аргументе косинус с плавающей запятой формата F; процеду-

  ра MTH$DSINCOSD - число с плавающей запятой формата D; про-

  цедура MTH$GSINCOSD - число с плавающей запятой формата  G;

  процедура MTH$HSINCOSD - число с плавающей запятой  формата

  H.
                                               

       Описание.

       Все процедуры  с  точками  входа  JSB  принимают  один

  аргумент в R0...RM. Зависимость м от типа данных определена

  в табл.17.








                           - 126 -

                       00152-01 33 09-3


                                                  Таблица 17

   ---------------------------------------------------------

    Тип данных                         !          M

   ---------------------------------------------------------

   число с плавающей запятой формата F !          0

   число с плавающей запятой формата D !          1

   число с плавающей запятой формата G !          1

   число с плавающей запятой формата H !          3


       Процедура MTH$SINCOSD возвращает два значения. Синус X

  возвращается  в   R0...RM,   а   косинус   X   возвращается

  B(R<M+1>...R<2*M+1>).

       Вычисление  [Z]SIND(X)  и   [Z]COSD(X)   основано   на

  следующих формулах:


       1) SIND(X)=(C*X)-(C*X)**3/(3!)+(C*X)**5/(5!)-

          -(C*X)**7/(7!)...=X/2**6+X*Р(X**2),            (62)

  где P(Y)=-Y/(3!)+Y**2/(5!)-Y**3/(7!)...,

      С = П/180;

       СOSD(X)=1-(C*X)**2/(2!)+(C*X)**4/(4!)-(C*X)**6/(6!)...

              =Q(X*2),                                   (63)

  где Q(Y)=1-Y/(2!)+Y**2/(4!)-Y**3/(6!)...,

      С   =П/180;

       2) если /X/<(180/P)*2**-2**(E-1), то сигнализируется о

  переполнении снизу чисел с плавающей запятой;

       3) если /X/<(180/П)2**(-F/2), тогда

          [Z]SIND(X)=(П/180)*X;                          (64)

       [Z]COSD(X)=1;                                     (65)




                           - 127 -

                       00152-01 33 09-3


       Если (180/П)*2**(-F/2)=</X/<45, тогда

       [Z]SIND(X)==X/2**6+P(X**2);                        (66

       [Z]COSD(X)=Q(X**2);                                (67

       5) если  45=</X/ и X>0, тогда

       Пусть J=INT(X/(45)) и I=J (MOD 8), если  J-чETHOE,  то

  Y=X-J*45; в противном случае, Y=(J+I)*45-X,  тогда  зависи-

  мость SIND(X) и COSD(X) от SIND(Y) и  COSD(Y)  приведена  в

  табл.18.

                                                  Таблица 18

   ---------------------------------------------------------

   Значение I   !    [Z]SIND(X)      !    [Z]COSD (X)

   ---------------------------------------------------------
    
     0          !   [Z]SIN (X)       !   [Z]COS (X)

     1          !   [Z]COS (Y)       !   [Z]SIN (Y)

     2          !   [Z]COS (Y)       ! - [Z]SIN (Y)

     3          !   [Z]SIN (Y)       ! - [Z]COS (Y)

     4          ! - [Z]SIN(Y)        ! - [Z]COS (Y)

     5          ! - [Z]COS(Y)        ! - [Z]SIN (Y)

     6          ! - [Z]COS(Y)        !   [Z]SIN (Y)

     7          ! - [Z]SIN(Y)        !   [Z]COS (Y)



       [Z]SIND(Y) и [Z]COSD(Y) вычисляются следующим образом:

       [Z]SIND(Y)=Y/2**6+P(Y**2);                        (68)

       [Z]COSD(Y)=Q(Y**2);                               (69)

       6) если 45=</|X и X<0, тогда

       [Z]SIND(X) =- [Z]SIND(/X/);                       (70)

       [Z]COSD(X)=[Z]COSD(/X/).                          (71)




                           - 128 -

                       00152-01 33 09-3


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$FLOUNDMAT

       - переполнение  снизу  чисел   с   плавающей   запятой

         абсолютное  значение  введенного  угла  меньше,  чем

         180/П*2**-М, где М=128 для чисел с плавающей запятой

         формата F, и чисел с плавающей  запятой  формата  D,

         М=1,024 для чисел с плаващей  запятой  формата  G  и

         М=16,384 для чисел с плавающей запятой формата H.



       1.33. МTH$SIND - синус  угла,  выраженного  в

             градусах


       Данная процедура возвращает синус данного угла.


       Формат:

       МTH$SIND  X

       МTH$DSIND X

       МTH$GSIND X

       МTH$HSIND синус,X


       Точки входа JSB:

       МTH$SIND_R4

       МTH$DSIND_R7

       МTH$GSIND_R7



                           - 129 -

                       00152-01 33 09-3


       МTH$HSIND_R5


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Синус угла.  Процедура  MTH$SIND  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DSIND-  число  с

  плавающей запятой формата D; процедура MTH$GSIND - число  с

  плавающей запятой формата G; процедура MTH$HSIND возвращает

  угол в аргументе синус.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Угол (в градусах). Аргумент Х является адресом числа с

  плавающей  запятой.  Для  процедуры  MTH$SINDX  аргумент  X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DSIND - число с плавающей запятой формата  D;  для



                           - 130 -

                       00152-01 33 09-3
                                                             

  процедуры MTH$GSIND - число с плавающей запятой формата  G;

  для процедуры MTH$HSIND - число с плавающей запятой формата

  H.


       Синус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Синус  угла.  Аргумент  X  является  адресом  числа  с

  плавающей запятой формата  H.  Аргумент  угол  используется

  только процедурой MTH$HSIND.


       Описание.

       Алгоритм вычисления синуса (см. подраздел 1.32)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$FLOUNDMAT

       - переполнение  снизу  чисел  с   плавающей   запятой:

         абсолютное  значение  введенного  угла  меньше   чем

         180/п*2**-м, где м=128 для чисел с плавающей запятой

         формата F и чисел с  плавающей  запятой  формата  D,

         м=1,024 для чисел с  плавающей  запятой  формата  G,

         м=16,34 для чисел с плавающей запятой формата H.



                           - 131 -

                       00152-01 33 09-3


       1.34. МTH$SINH - гиперболический синус


       Данная  процедура  возвращает  гиперболический   синус

  введенного значения.


       Формат:

       МTH$SINH   Х

       МTH$DSINH  Х

       МTH$GSINH  Х

       МTH$HSINH  синус, Х


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Гиперболический синус Х. Процедура MTH$SINH возвращает

  число с плавающей запятой формата F; процедура MTH$DSINH  -

  число с плавающей запятой формата D; процедура MTH$GSINH  -

  число с плавающей запятой формата  G;  процедура  MTH$HSINH

  возвращает гиперболический синус в аргументе синус.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,



                           - 132 -

                       00152-01 33 09-3


            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Введенное значение. Аргумент Х является адресом  числа

  с плавающей запятой. Для процедуры MTH$SINH аргумент  синус

  определяет число с плавающей запятой формата  F;  процедура

  MTH$DSINH - число с плавающей запятой формата D;  процедура

  MTH$GSINH - число с плавающей запятой формата G;  процедура

  MTH$HSINH - число с плавающей запятой формата H.


       Синус

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Гиперболический синус  введенного  значения.  Аргумент

  синус является адресом числа с плавающей запятой формата H.

  Аргумент синус используется только процедурой MTH$HSINH.


       Описание.

       Вычисление гиперболического синуса зависит от величины

  введенного аргумента. Значение аргумента может находится  в

  одном из диапазонов. Для каждого из  диапазонов  существует

  своя формула вычисления  гиперболического  синуса,  границы

  диапазона определяются с помощью констант A(Z), B(Z), C(Z),

  D(Z). Константы зависят от типа данных и определяются  пос-

  редством числа битов порядка (E) и числа битов дробной час-
                                                            



                           - 133 -

                       00152-01 33 09-3


  ти (F).

       Зависимость е и F от типа данных Z приведена в табл.19

                                               Tаблица 19

      ---------------------------------------------------

        Z       !       E      !        F

      ---------------------------------------------------

        F       !       8     !       24

        D       !       8     !       56

        G       !      11     !       53

        H       !      15     !      113


       Значения констант в зависимости от е и F  приведены  в

  табл.20.

                                                   Таблица 20

  -----------------------------------------------------------

   Константа          !   Значение

  -----------------------------------------------------------

  A(Z)                ! 2**(-F/2)                       (72)

                      !                        1)

  B(Z)                ! CEILING[(F+I)/2*LN(2)]          (73)

                      !                    2)

                      ! (F+I)/2*LN(2) C(Z)              (74)

  C(Z)                ! 2**(E-1)-1)*LN(2)               (75)

  D(Z)                ! C(Z)+LN(2)                      (76)

  ---------------------------------


       1) для чисел с плавающей запятой форматов F, D, G;

       2) для чисел с плавающей запятой формата Н.




                           - 134 -

                       00152-01 33 09-3


       Алгоритм вычисления [Z]SINH(X) приведен в табл.21.

                                                  Таблица 21

   ---------------------------------------------------------

    Значение Х      ! Возвращаемое значение

   ---------------------------------------------------------

    /Х/ <A(Z)       ! Х

    A(Z)-</X/<0,25  ! Вычисляется, используя расширение сте-

                    ! пенного ряда /Х/**2

   0,25=</X/<B(Z)   ! ([Z]EXP(X)-[Z]EXP(-X))/2

    B(Z)=</X/<C(Z)  ! SIGN(X)*[Z]EXP(/X/)/2

    C(Z)=</X/<D(Z)  ! SIGN(X)*[Z]EXP(/X/)LN(2))

    D(Z)=</X/       ! Переполнение сверху


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$FLOOVEMAT

       - переполнение  сверху  чисел  с  плавающей   запятой:

         абсолютное значение  Х  больше  чем  YYY.  Процедура

         LIB$SIGNAL переписывает зарезервированный операнд  с

         плавающей  запятой  в   вектор   CHF$L_MCH_SAVR0/R1.

         Результатом  является  зарезервированный  операнд  с

         плавающей запятой, если не  предусмотрена  программа

         обработки исключительного  состояния  для  изменения

         CHF$L_MCH_SAVR0/R1.



                           - 135 -

                       00152-01 33 09-3


       Значения YYY следующие:

       МTH$SINH  - 88,722;

       МTH$DSINH - 88,722;

       МTH$GSINH - 709,782;

       МTH$HSINH - 11356,523.



       1.35. МTH$[Z]SQRT - квадратный корень


       Данная   процедура   возвращает   квадратный    корень

  введенного значения.


       Формат:

       МTH$SQRT  Х

       МTH$DSQRT Х

       МTH$GSQRT Х

       МTH$HSQRT квадратный корень, Х


       Точки входа JSB:

       МTH$SQRT_R3

       МTH$DSQRT_R5

       МTH$GSQRT_R5

       МTH$HSQRT_R8


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись




                           - 136 -

                       00152-01 33 09-3


       Механизм: посредством значения

       Квадратный корень  Х.  Процедура  MTH$SQRT  возвращает

  число с плавающей запятой формата F; процедура MTH$DSQRT  -

  число с плавающей запятой формата D; процедура MTH$GSQRT  -

  число с плавающей запятой формата  G;  процедура  MTH$HSQRT

  возвращает квадратный корень в аргументе квадратный корень.


       Аргументы:


       Х

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Введенное значение. Аргумент X является адресом  числа

  с плавающей запятой.  Для  процедуры  MTH$SQRT  аргумент  X

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$DSQRT - число с плавающей запятой формата  D;  для

  процедуры MTH$GSQRT - число с плавающей запятой формата  G;

  для процедуры MTH$HSQRT - число с плавающей запятой формата

  H;


       Квадратный корень

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись



                           - 137 -

                       00152-01 33 09-3


       Механизм: посредством ссылки

       Квадратный корень введенного значения. Аргумент  квад-

  ратный корень является адресом числа  с  плавающей  запятой

  формата H. Аргумент квадратный корень  используется  только

  процедурой MTH$HSQRT.


       Описание.

       Квадратный корень X вычисляется следующим образом:

       1) если X<0, сигнализируется ошибка;

       2) пусть X=2**K*F,

       - если K четное (K = 2P), тогда X=2**(2*P)*F

         [Z]SQRT(X)=2**P*[Z]SQRT(F),

         где P = K/2

             1/2=<F<1,                                  (77)

       - если K нечетное (K = 2*P+1), тогда X=2**(2*P+1)*F=

         =2**(2*P+2)*(F/2)

         [Z]SORT(X)=2**(P+1)*[Z]SQRT(F/2),

         где P=(K-1)/2

             1/4=<F/2<1/2                               (78)

       3) пусть F'=A*F+B, и K четное, тогда

       А=0,453730314 (восьмеричное)

       В=0,327226214 (восьмеричное)

       Пусть F'=A*F+B и K нечетное, тогда

       А=0,650117146 (восьмиричное)

       В=0,230170444 (восьмиричное)

       Пусть K'=P, где K четное

       Пусть K'=P+1, где K нечетное





                           - 138 -

                       00152-01 33 09-3


       Пусть  Y[0]=2K*F  начальная   линия   апроксимации   в

  пределах данного интервала с использованием коэфиициентов а

  и в, которые минимизируют абсолютную ошибку в средней точке

  и конечной точке.

       Начиная с Y[0], выполняется N итераций ньютона -


        Y[N+1] = 1/2*(Y[N] + X/Y[N]),                  (79)

       Где N = 2, 3, 3, или 5 для чисел с  плавающей  запятой

  форматов F, G, D или H соответственно.


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервировано для даль-

         нейшего использования. Зарезервированный  операнд  с

         плавающей запятой представляет  собой  отрицательный

         нуль(-0,0);

  MTH$_SQUROONEG

       - квадратный корень отрицательного числа.  Аргумент  X

         меньше  чем  (0,0).  Процедура  LIB$SIGNAL  копирует

         зарезервированный операнд с плавающей запятой в век-

         тор CHF$L_MCH_SAVR0/R1. Результатом  является  заре-

         зервированый операнд с плавающей  запятой,  если  не

         предусмотрена  программа  обработки  исключительного

         состояния для изменения CHF$L_MCH_SAVR0/R1.












                           - 139 -

                       00152-01 33 09-3


       1.36. МTH$[Z]TAN - тангенс угла,  выраженного

             в радианах



       Данная  процедура   вычисляет   тангенс   данного   (в

  радианах) угла.


       Формат:

       МTH$TAN    угол

       МTH$DTAN   угол

       МTH$GTAN   угол

       МTH$HTAN   тангенс, угол


       Точки входа JSB:

       МTH$TAN_R4

       МTH$DTAN_R7

       МTH$GTAN_R7

       МTH$HTAN_R5


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Тангенс угла. Процедура  MTH$TAN  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DTAN -  число  с

  плавающей запятой формата D; процедура MTH$GTAN -  число  с

  плавающей запятой формата G; процедура MTH$HTAN  возвращает



                           - 140 -

                       00152-01 33 09-3


  тангенс угла в аргументе тангенс.


       Аргументы:


       Угол

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки

       Угол (в  радианах).  Аргумент  угол  является  адресом

  числа с плавающеи запятой. Для процедуры  MTH$TAN  аргумент

  угол определяет число с плавающей запятой  формата  F;  для

  процедуры MTH$DTAN аргумент угол определяет число с плаваю-

  щей запятой формата D; для процедуры MTH$GTAN аргумент угол

  определяет число с плавающей запятой формата G; для  проце-

  дуры MTH$HTAN аргумент угол определяет  число  с  плавающей

  запятой формата H.


       Тангенс

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Тангенс угла. Аргумент тангенс является адресом  числа

  с плавающей запятой формата н. Аргумент тангенс использует-

  ся только процедурой MTH$HTAN.



                           - 141 -

                       00152-01 33 09-3


       Описание.

       Если заданный угол выражен в радианах, тангенс угла

  вычисляется следующим образом:


       1) если /X/<2**(-F/2),тогда [Z]TAN(X)=X;          (80)

       2) иначе,вызвать процедуру MTH$[Z]SINCOS для по-

          лучения [Z]SIN(X) и [Z]COS(X), тогда:

          - если [Z]COS(X)=0, сигнализируется переполнение

            сверху чисел с плавающей запятой;

          - в противном случае,

            [Z]TAN(X)=[Z]SIN(X)/[Z]COS(X)                (81)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования;

  MTH$_FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой.



       1.37. МTH$[Z]TAND - тангенс угла, выраженного

             в градусах



       Данная  процедура   вычисляет   тангенс   данного   (в

  градусах) угла








                           - 142 -

                       00152-01 33 09-3


       Формат:

       МTH$TAND угол

       МTH$DTAND угол

       МTH$GTAND угол

       МTH$HTAND тангенс, угол


       Точки входа JSB:

       МTH$TAND_R4

       МTH$DTAND_R7

       МTH$GTAND_R7

       МTH$HTAND_R5


       Код возврата:

       Использование МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Тангенс угла. Процедура MTH$TAND  возвращает  число  с

  плавающей запятой формата F; процедура MTH$DTAND - число  с

  плавающей запятой формата D; процедура MTH$GTAND - число  с

  плавающей запятой фомата G; процедура MTH$HTAND  возвращает

  тангенс угла в аргументе тангенс.


       Аргументы:


       Угол






                           - 143 -

                       00152-01 33 09-3


       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F;

            число с плавающей запятой формата D;

            число с плавающей запятой формата G;

            число с плавающей запятой формата H

       Доступ: только чтение

       Механизм: посредством ссылки


       Значение угла (в  градусах).  Аргумент  угол  является

  адресом числа с плавающей запятой. Для  процедуры  MTH$TAND

  аргумент угол определяет число с плавающей запятой  формата

  F; для процедуры MTH$DTAND  -  число  с  плавающей  запятой

  формата D; для процедуры  MTH$GTAND  -  число  с  плавающей

  запятой формата G; для процедуры MTH$HTAND - число  с  пла-

  вающей запятой формата H.


       Тангенс

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата H

       Доступ: только запись

       Механизм: посредством ссылки

       Тангенс угла. Аргумент тангенс является адресом  числа

  с плавающей запятой формата H. Аргумент тангенс использует-

  ся только процедурой MTH$HTAND.


       Описание.

       Если  заданный  угол  выражен  в   градусах,   тангенс

  вычисляется следующим образом:





                           - 144 -

                       00152-01 33 09-3


       1) если /X/<(180/П)*2**-2 и разрешено переполнение

          снизу, сигнализируется переполнение снизу чисел

          с плавающей запятой;

       2) если /X/<(180/П)*2**(-F/2),

          тогда [Z]TAND(X)=(П/180)*X;                    (82)

       3) иначе, вызвать процедуру MTH$[Z]SINCOSD для полу-

          чения [Z]SIND(X) и [Z]COSD(X), тогда:

       -  если [Z]COSD(X)=0, то сигнализируется переполнение

          сверху чисел с плавающей запятой;

       -  иначе, [Z]TAND(X)=[Z]SIND(X)/[Z]COSD(X)        (83)


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервировано для даль-

         нейшего использования. Зарезервированный  операнд  с

         плавающей запятой представляет  собой  отрицательный

         нуль (-0,0);

  MTH$_FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой.



       1.38. МTH$[Z]TANH        -         вычисление

             гиперболического тангенса



       Данная процедура  возвращает  гиперболическии  тангенс

  введенного значения.









                           - 145 -

                       00152-01 33 09-3


       Формат:

       МTH$TANH угол

       МTH$DTANH угол

       МTH$GTANH угол

       МTH$HTANH тангенс, угол


       Код возврата:

       Использование МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Гиперболическии   тангенс   Х.   Процедура    MTH$TANH

  возвращает число с плавающей запятой формата  F;  процедура

  MTH$DTANH - число с плавающей запятой формата D;  процедура

  MTH$GTANH - число с плавающей запятой формата G;  процедура

  MTH$HTANH возвращает  гиперболическии  тангенс  в  аргумент

  тангенс.


       Аргументы:


       Угол

       Использование МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F,

            число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только чтение



                           - 146 -

                       00152-01 33 09-3


       Механизм: посредством ссылки

       Введенное значение. Аргумент Х является адресом  числа

  с плавающей запятой.  Для  процедуры  MTH$TANH  аргумент  Х

  определяет число с плавающей запятой формата F; для  проце-

  дуры MTH$GTANH - число с плавающей запятой формата  G;  для

  процедуры MTH$HTANH - число с плавающей запятой формата Н.


       Тангенс

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством ссылки

       Гиперболическии тангенс Х. Аргумент  тангенс  является

  адресом числа с плавающей запятой формата Н. Аргумент  тан-

  генс используется только процедурой MTH$HTANH.


       Описание.

       Алгоритм вычисления гиперболического тангенса Х проце-

  дурой MTH$HTANH приведен в табл.22.

                                                  Таблица 22

   ---------------------------------------------------------

   Значение Х        !  Возвращаемый гиперболический тангенс

   ---------------------------------------------------------

   /Х/=<2**-56       !  Х

   2**-56</Х/=<0,25  !  [Z]SINH(X)/[Z]COSH(X)           (84)

   0,25</Х/<Р        !  ([Z]EXP(2*X)-1)/([Z]EXP(2*X)+1) (85)

   40=</Х/            !  SIGN(X)*I






                           - 147 -

                       00152-01 33 09-3


       Вычисления  гиперболического  тангенса  Х  процедурами

  MTH$TANH, MTH$DTANH, MTH$GTANH приводится в табл.23.

                                                  Таблица 23

   ---------------------------------------------------------

   Значение Х      !    Возвращаемое значение

   ---------------------------------------------------------

               1)  !

   /X/=<2**-G      !    Х

                1) !

   2**-G</X/=<0,5  !    [Z]TANH(X)=X+X^3*R(X^2),      (86)

                   !    где R(X^2)-рациональная функция Х^2

   0,5</Х/<1,0     !    [Z]TANH(X)=[Z]TANH(XHI)+

                   !    [Z]TANH(XLO)*C/B,             (87)

                   !    где C=1-[Z]TANH(XHI)*[Z]TANH(XHI),

                   !        B=1+[Z]TANH(XHI)*[Z]TANH(XLO),

                   !        XHI=1/2+N/16+1/32 для N=0,1,...,

                   !        XLO=X-XHI

            1)     !

   1,0</Х/<P       !    [Z]TANH(X)=([Z]EXP(2*X)-

                   !    - 1)/([Z]EXP(2*X)+1),         (88)

            1)     !

   P=</X/          !    [Z]TANH(X)=SING(X)*1

   -----------------------


       1) G= 12,28,26 и  P=10,20,19  для  чисел  с  плавающей

  запятой форматов F, D, G соответственно.







                           - 148 -

                       00152-01 33 09-3


       Сигнализируемые значения состояния:

  SS$_ROPRAND

       - зарезервированныи операнд. Зарезервировано для даль-

         нейшего использования. Зарезервированный  операнд  с

         плавающей запятой представляет  собой  отрицательный

         нуль (-0,0).



       1.39. МTH$[Z]UMAX - вычисление максимума


       Данная процедура вычисляет максимум  без  знака  из  N

  аргументов, где N больше или равно 1.


       Формат:

       МTH$UMAX аргумент 1[..., аргумент N]


       Код возврата:

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения

       Максимальное   значение,    возвращаемое    процедурой

  MTH$UMAX.


       Аргументы:


       Аргумент 1

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение





                           - 149 -

                       00152-01 33 09-3


       Механизм: посредством ссылки

       Первый аргумент из аргументов,  из  которых  процедура

  MTH$UMAX вычисляет максимум.  Аргумент  аргумент1  является

  длинным словом без знака,содержащим значение первого  аргу-

  мента.


       Аргумент N

       Использовныие в МОС ВП: длинное слово без знака

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством ссылки

       Последний аргумент из аргументов, из которых процедура

  MTH$UMAX вычисляет максимум. Аргумент аргумент  N  является

  длинным словом без знака,которое содержит значение  послед-

  него аргумента.


       Описание.

       Процедура  MTH$UMAX   является   вариантом   процедуры

  MTH$JMAX.


       Возвращаемые значения состояния:

       Не существуют



       1.40. МTH$UMIN - вычисление минимума



       Данная процедура вычисляет минимум  из  N  аргументов,

  где N больше или равно 1.







                           - 150 -

                       00152-01 33 09-3


       Формат:

       МTH$UMIN аргумент 1[...,аргумент N]


       Код возврата:

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения

       Минимальное    значение,    возвращаемое    процедурой

  MTH$UMIN.


       Аргументы:


       Аргумент 1

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки

       Первый аргумент из аргументов,  из  которых  процедура

  MTH$UMIN вычисляет минимум. Аргумент  аргумент  1  является

  длинным словом без знака,содержащим значение первого  аргу-

  мента.


       Аргумент N

       Использование МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки

       Последний аргумент из аргументов, из которых процедура




                           - 151 -

                       00152-01 33 09-3


  MTH$UMIN вычисляет минимум. Аргумент  аргумент  N  является

  длинным словом.


       Описание.

       Процедура  MTH$UMIN   является   вариантом   процедуры

  MTH$JMIN.


       Возвращаемые значения состояния:

       Не существуют.










































                           - 152 -

                       00152-01 33 09-3


              2. Независимые от языка процедуры




       В данном разделе приводится  описание  независимых  от

  языка процедур. Они включают в себя процедуры,  выполняющие

  некоторые арифметические действия над комплексными  числами

  с плавающей запятой и  десятичными  числами  в  упакованном

  формате; процедуры преобразования типов  данных;  процедуры

  пересылки и процедуры выделения ресурсов для процесса.



       2.1. ОTS$CVT_L_TB-преобразование целого  без

            знака в двоичную символьную строку



       Данная процедура преобразует целое значение без  знака

  произвольной длины в  двоичную  символьную  строку  в  коде

  КОИ-8. По умолчанию преобразуется длинное слово.


       Формат:

       ОTS$CVT_L_TB   значение, выходная строка [, счетчик]

                      [, размер]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово(без знака)

       Доступ: только запись

       Механизм: посредством значения









                           - 153 -

                       00152-01 33 09-3


       Аргументы:


       Значение

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только чтение

       Механизм: посредством ссылки

       Целое   значение   без   знака,   которое    процедура

  OTS$CVT_L_TB преобразует в  двоичную  символьную  строку  в

  коде КОИ-8. Аргумент значение является адресом целого  зна-

  чения.


       Выходная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора фиксированной длины

       Символьная строка  в  коде  КОИ-8,  которую  процедура

  OTS$CVT_L_TB создает, при преобразовании  целого  значения.

  Аргумент  выходная  строка  является  адресом  дескриптора.

  Строка предполагается фиксированной длины( DSC$K_CLASS_S)


       Счетчик

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Минимальное число разрядов, которое будет  сформирова-

  но. Аргумент счетчик является целым длинным словом со  зна-



                           - 154 -

                       00152-01 33 09-3


  ком. Необязательный аргумент. По умолчанию  устанавливается

  1. Если действительное число значащих разрядов  меньше  чем

  минимальное число разрядов, создаются начальные нули.  Если

  минимальное число разрядов 0 и целое преобразуемое значение

  также 0,процедура OTS$CVT_L_TB создает пустую строку.


       Размер значения

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер преобразуемого значения в байтах. Аргумент раз-

  мер является целым длинным словом со знаком. Необязательный

  аргумент. По умолчанию устанавливается 4.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_OUTCONERR

       - ошибка  преобразования.  Результат  превысил  размер

         строки фиксированной длины; выходная  строка  запол-

         няется звездочками.



       2.2. ОTS$CVT_L_TI - преобразование целого со

            знаком в десятичную символьную строку



       Данная процедура преобразует целое значение со  знаком

  в десятичную символьную строку в коде КОИ-8.




                           - 155 -

                       00152-01 33 09-3


       Формат:

       ОTS$CVT_L_TI   значение, выходная строка [, счетчик]

                      [, размер] [, флаги]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Значение

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только чтение

       Механизм: посредством ссылки

       Целое   значение   со   знаком,   которое    процедура

  OTS$CVT_L_TI преобразует в десятичную символьную  строку  в

  коде КОИ-8.  Аргумент  значение  является  адресом  данного

  целого.


       Выходная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора строки фиксированной

                 длины

       Десятичная символьная строка  в  коде  КОИ-8,  которую




                           - 156 -

                       00152-01 33 09-3


  процедура OTS$CVT_L_TI создает, когда преобразует целое  со

  знаком. Аргумент выходная строка является адресом  дескрип-

  тора, указывающего символьную строку. Строка предполагается

  фиксированной длины (DSC$K_CLASS_S).


       Счетчик

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Минимальное  число  разрядов,  формируемых  процедурой

  OTS$CVT_L_TI при преобразовании целого со знаком в десятич-

  ную символьную строку в коде КОИ-8. Аргумент счетчик разря-

  дов является целым длинным словом со знаком. Необязательный

  аргумент. По умолчанию устанавливается 1. Если действитель-

  ное число значащих разрядов  меньше,чем  минимальное  число

  разрядов процедура OTS$CVT_L_TI вставляет начальные нули  в

  выходную строку.


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер преобразуемого значения в байтах. Аргумент раз-

  мер является целым длинным словом со знаком, размер величи-

  ны должен быть 1,2 или 4. Необязательный аргумент. По умол-

  чанию устанавливается 4.




                           - 157 -

                       00152-01 33 09-3


       Флаги

       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Обеспечиваемые вызывающей  программой  флаги,  которые

  используются, если требуется, чтобы процедура  OTS$CVT_L_TI

  вставляла знак плюс перед преобразованным значением.  Аргу-

  мент флаги является длинным словом без знака.

       Флаг установлен, если установлен бит 0:  знак  плюс(+)

  вставляется перед первым символом, не являющимся  пробелом,

  иначе знак плюс опускается.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_OUTCONERR

       - ошибка преобразования.  Результат  превышает  строку

         фиксированной  длины;  выходная  строка  заполняется

         звездочками.



       2.3. ОTS$CVT_L_TL-преобразование  целого   в

            символьную строку



       Данная процедура преобразует целое значение в символь-

  ную строку в коде  КОИ-8,  используя  формат  L(логический)

  языка программирования Фортран.





                           - 158 -

                       00152-01 33 09-3


       Формат:

       ОTS$CVT_L_TL значение, выходная строка


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Значение

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством ссылки

       Целое значение, которое процедура OTS$CVT_L_TL  преоб-

  разует в строку в коде КОИ-8.  Аргумент  значение  является

  адресом целого длинного слова со знаком.


       Выходная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора строки фиксированной

                 длины

       Выходная строка, которую процедура  OTS$CVT_L_TL  соз-

  дает при преобразовании целого значения в символьную строку

  в коде КОИ-8. Аргумент  выходная  строка  является  адресом




                           - 159 -

                       00152-01 33 09-3


  дескриптора, указывающего данную  строку.  Выходная  строка

  предполагается фиксированной длины (DSC$K_CLASS_S).

       Выходная строка состоит из (длина-1) пробелов, следую-

  щих за буквой Т, если бит 0 установлен, или буквой F,  если

  бит 0 чист.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_OUTCONERR

       - ошибка преобразования.  Результат  превышает  строку

         фиксированной длины; выходная строка  будет  нулевой

         длины (DSDC$W_LENGTH=0).


       Пример.

      VALUE% = 10

      OUTSTR$ = ' '

      CALL OTS$CVT_L_TL(VALUE%, OUTSTR$)

      PRINT OUTSTR$

      END


       Данная  программа  на  языке  программирования  Бейсик

  иллюстрирует использование процедуры OTS$CVT_L_TL.  Резуль-

  тат выполнения данной программы:"F".













                           - 160 -

                       00152-01 33 09-3


       2.4. ОTS$CVT_L_TO  -  преобразование  целого

            без  знака  в  восьмеричную  символьную

            строку



       Данная процедура преобразует целое значение без  знака

  в восьмеричную символьную строку в коде КОИ-8.


       Формат:

       ОTS$CVT_L_TO   значение, выходная строка [, счетчик]

                      [, размер]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только запись

       Механизм: посредством ссылки

       Целое значение, которое процедура OTS$CVT_L_TO  преоб-

  разует в восьмеричную символьную строку в коде КОИ-8. Аргу-

  мент значение является адресом данного целого значения.








                           - 161 -

                       00152-01 33 09-3


       Выходная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора строки фиксированной

                 длины

       Выходная строка, которую процедура  OTS$CVT_L_TO  соз-

  дает при преобразовании целой величины в восьмеричную  сим-

  вольную строку  в  коде  КОИ-8.  Аргумент  выходная  строка

  является  адресом  дескриптора,  указывающего  восьмеричную

  символьную строку в коде КОИ-8. Строка предполагается  фик-

  сированной длины (DSC$K_CLASS_S).


       Счетчик

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Минимальное число разрядов, которое OTS$CVT_L_TO  фор-

  мирует, при преобразовании целой  величины  в  восьмеричную

  символьную строку в коде КОИ-8. Аргумент  счетчик  является

  целым длинным словом со знаком. Необязательный аргумент. По

  умолчанию устанавливается 1. Если действительное число зна-

  чащих разрядов в  восьмеричной  символьной  строке  в  коде

  КОИ-8 меньше, чем минимальное число разрядов, то  процедура

  OTS$CVT_L_TO вставляет начальные нули в выходную строку.







                           - 162 -

                       00152-01 33 09-3


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер  (в  байтах)  преобразуемого  целого  значения.

  Аргумент размер является целым длинным  словом  со  знаком.

  Необязательный аргумент. По умолчанию устанавливается 4.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_OUTCONERR

       - ошибка преобразования.  Результат  превышает  строку

         фиксированной  длины;  выходная  строка  заполняется

         звездочками.



       2.5. ОTS$CVT_L_TU  -  преобразование  целого

            без  знака  в   десятичную   символьную

            строку



       Данная процедура преобразует целую величину  длиной  в

  байт, слово или длинное слово в десятичную символьную стро-

  ку в коде КОИ-8. По умолчанию преобразуется длинное слово.


       Формат:

        OTS$CVT_L_TU   величина, выходная строка [, счетчик]

                       [, размер]




                           - 163 -

                       00152-01 33 09-3


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только чтение

       Механизм: посредством ссылки


       Байт, слово или длинное слово без знака, которое  про-

  цедура OTS$CVT_L_TU  преобразует  в  десятичную  символьную

  строку в коде КОИ-8  (значение  аргумента  размер  величины

  показывает является ли величина байтом, словом или  длинным

  словом). Аргумент величина является адресом целого без зна-

  ка.


       Выходная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора строки фиксированной

  длины

       Выходная строка (фиксированной длины), которую  проце-

  дура OTS$CVT_L_TU создает, при преобразовании целой величи-




                           - 164 -

                       00152-01 33 09-3


  ны в десятичную символьную строку в  коде  КОИ-8.  Аргумент

  выходная строка является адресом дескриптора,  указывающего

  данную строку.


       Счетчик

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Минимальное число разрядов в символьной строке в  коде

  КОИ-8, которую  создает  процедура  OTS$CVT_L_TU.  Аргумент

  счетчик является длинным словом без  знака.  Необязательный

  аргумент. По умолчанию устанавливается 1. Если действитель-

  ное число значащих разрядов в выходной строке  меньше,  чем

  минимальное  число  разрядов,  то  процедура   OTS$CVT_L_TU

  вставляет начальные нули в выходную строку.


       Размер

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Размер  (в  байтах)  преобразуемого  целого  значения.

  Аргумент размер является длинным словом без знака. Необяза-

  тельный аргумент. По умолчанию устанавливается 4. Значения,

  которые разрешены процедурой OTS$CVT_L_TU 1, 2  и  4.  Если

  определено любое другое значение,  OTS$CVT_L_TU  использует

  устанавливаемое по умолчанию значение 4.




                           - 165 -

                       00152-01 33 09-3


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_OUTCONERR

       - ошибка преобразования.  Результат  превышает  строку

         фиксированной  длины;  выходная  строка   забивается

         звездочками.


       Пример.

  0123456789!0123456789!0123456789!0123456789!0123456789

  FTTY    D   F     7        TTY

  С* инициализировать преобразуемое значение.

  С                     Z-ADD32857     VALUE  90

  С                     Z-ADD7         DIGITS 90

  С           GVTLTU    EXTRN'OTS$CVT_L_TU'

  С* преобразовать десятичное число в строку, которая

  С  состоит из 7 десятичных цифр.

  С                     CALL CVTLTU

  С                     PARM           VALUE     RT

  С                     PARMD          OUTSTR 7

  С                     PARMV          DIGITS

  С* отобразить на терминале преобразованную строку.

  С           OUTSTR    DSPLYTTY

  С                     SETON                    LR


       Данная программа на языке программирования RPG 2 отоб-

  ражает на экране терминала строку '0032857'.






                           - 166 -

                       00152-01 33 09-3


       2.6. ОTS$CVT_L_TZ - преобразование целого  в

            шестнадцатеричную символьную строку



       Данная процедура преобразует целое значение без  знака

  в шестнадцатеричную символьную строку в коде КОИ-8.


       Формат:

       ОTS$CVT_L_TZ   величина, выходная строка [, счетчик]

                      [, размер]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только чтение

       Механизм: посредством ссылки

       Целое значение,  которое  OTS$CVT_L_TZ  преобразует  в

  шестнадцатеричную символьную строку в коде КОИ-8.  Аргумент

  величина является адресом данного целого значения.


       Выходная строка

       Использование в МОС ВП: символьная строка





                           - 167 -

                       00152-01 33 09-3


       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора строки фиксированной

                 длины

       Выходная строка, которую процедура OTS$CVT_L_TU форми-

  рует, при преобразовании целой величины в символьную  шест-

  надцатеричную строку в коде КОИ-8. Аргумент выходная строка

  является адресом дескриптора, указывающего символьную стро-

  ку в коде КОИ-8. Строка предполагается фиксированной  длины

  (DSC$K_CLASS_S).


       Счетчик

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Минимальное число разрядов в символьной строке в  коде

  КОИ-8. Аргумент счетчик является целым  длинным  словом  со

  знаком, содержащим минимальное число разрядов. Необязатель-

  ный аргумент. По умолчанию устанавливается 1. Если действи-

  тельное число значащих разрядов в строке,  которую  создает

  OTS$CVT_L_TZ меньше, чем  минимальное  число  разрядов,  то

  процедура OTS$CVT_L_TZ вставит начальные  нули  в  выходную

  строку.


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)




                           - 168 -

                       00152-01 33 09-3


       Доступ: только чтение

       Механизм: посредством значения

       Размер   (в    байтах)    преобразуемого    процедурой

  OTS$CVT_L_TZ  целого  значения.  Аргумент  размер  является

  целым длинным словом со знаком. Аргумент не обязателен.  По

  умолчанию устанавливается 4.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_OUTCONERR

       - ошибка преобразования.  Результат  превышает  строку

         фиксированной  длины;  выходная  строка  заполняется

         звездочками.


       Пример.


       Данная программа на языке программирования Ада исполь-

  зует процедуру OTS$CVT_L_TZ для преобразования целого длин-

  ного слова в шестнадцатеричный текст.

  WITH TEXT_IO; USE TEXT_IO;

  PROCEDURE SHOW_CONVERT IS

     TYPE INPUT_INT IS NEW INTEGER RANGE 0..INTEGER'LAST;



     INTVALUE : INPUT_INT := 256;

     HEXSTRING STRING (1...11);



     PROCEDURE CONVERT_TO_HEX (I : IN INPUT_INT; HS : OUT

     STRING)



                           - 169 -

                       00152-01 33 09-3


     PROGMA INTERFACE (RTL, CONVERT_TO_HEX);

     PROGMA IMPORT_RPROCEDURE (INTERNAL => CONVERT_TO_HEX,

                               EXTERNAL => "OTS$CVT_L_TZ",

                               MECHANISM =>(REFERENCE,

                               DISCRIPTOR (CLASS => S)));

  BEGIN

     CONVERT_TO_HEX (INTVALUE< HEXSTRING);

     PUT_LINE("THIS IS VALUE OF HEXSTRING");

     PUT_LINE(HEXSTRING);

  END;



       2.7. ОTS$CNVOUT  -  преобразование  числа  с

            плавающей запятой форматов D, G, Н


       Данная процедура преобразует числа с плавающей запятой

  форматов D, G или н в символьную строку в формате  е  языка

  программирования фортран.


       Формат:

      OTS$CNVOUT   величина, выходная строка, разряды мантисы

      OTS$CNVOUT_G величина, выходная строка, разряды мантисы

      OTS$CNVOUT_H величина, выходная строка, разряды мантисы


       Код возврата:

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения





                           - 170 -

                       00152-01 33 09-3


       Аргументы:


       Величина

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата D,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством ссылки

       Величина, которую процедура OTS$CNVOUT  преобразует  в

  строку символов. Для процедуры OTS$CNVOUT аргумент величина

  является адресом числа с плавающей запятой формата  D;  для

  процедуры OTS$CNVOUT_H - число с плавающей запятой  формата

  Н; для процедуры OTS$CNVOUT_G - число с  плавающей  запятой

  формата G.


       Выходная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора строки фиксированной

                 длины

       Выходная строка, в которую процедура OTS$CNVOUT  запи-

  сывает строку символов, являющуюся результатом преобразова-

  ния. Аргумент выходная строка является адресом дескриптора,

  указывающего выходную строку.








                           - 171 -

                       00152-01 33 09-3


       Разряды мантисы

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Число разрядов в мантисе результата. Аргумент  разряды

  мантисы является длинным словом без знака, содержащим число

  разрядов.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  SS$_ROPRAND

       - зарезервированный операнд;

  OTS$_OUTCONERR

       - ошибка преобразования.  Результат  превышает  строку

         фиксированной  длины;  выходная  строка  заполняется

         звездочками.



       2.8. ОTS$CVT_TB_L - преобразование  двоичной

            символьной строки в целое



       Данная процедура преобразует двоичную символьную стро-

  ку в коде КОИ-8 в целое  значение  без  знака  произвольной

  длины. По умолчанию, результат является длинным словом.









                           - 172 -

                       00152-01 33 09-3


       Формат:

       ОTS$CVT_TB_L  входная строка, величина, [, размер]

                     [, флаги]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Входная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора

       Двоичная символьная  строка  в  коде  КОИ-8.  Аргумент

  входная строка является адресом  дескриптора,  указывающего

  символьную строку в коде КОИ-8.


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только запись

       Механизм: посредством ссылки

       Целое значение, которое процедура OTS$CVT_TB_L  форми-

  рует при преобразовании. Аргумент величина является адресом

  целого значения.




                           - 173 -

                       00152-01 33 09-3


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер (в байтах) целой величины. Если аргумент размер

  содержит 0 или отрицательное число, процедура  OTS$CVT_TB_L

  возвращает ошибочный код  как  значение  состояния.  Данный

  аргумент необязателен. По умолчанию устанавливается 4.


       Флаги

       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Обеспечиваемые пользователем флаги, которые  процедура

  OTS$CVT_TB_L использует для интерпретации пробелов и знаков

  табуляции. Данный аргумент необязателен. По  умолчанию  все

  биты сброшены. Значение флагов показано в табл. 24.

                                                  Таблица 24

  ----------------------------------------------------------

  Бит              !           Описание

  ----------------------------------------------------------

  0                ! Если установлен, процедура OTS$CVT_TB_L

                   ! игнорирует пробелы; если сброшен, про-

                   ! цедура OTS$CVT_TB_L интепретирует про-

                   ! белы как нули




                           - 174 -

                       00152-01 33 09-3


                                        Продолжение табл. 24

  ----------------------------------------------------------

  Бит              !           Описание

  ----------------------------------------------------------

  4                ! если установлен, процедура OTS$CVT_TB_L

                   ! игнорирует знаки табуляции; если сбро-

                   ! шен, процедура OTS$CVT_TB_L интерпрети-

                   ! рует знаки табуляции как неправильные

                   ! символы


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTC$INPCONERR

       - ошибка преобразования. Неправильный символ, перепол-

         нение или неправильный аргумент размер.


       Пример.


  1

  OPTION

     TYPE = EXPLICIT

    !+

    !  данная программа на языке программирования бейсик де-

    !  монстрирует использование OTS$CVT_TB_L.

    !  отдельные двоичные числа читаются и затем преобразуют-

    !  ся в их десятичные эквиваленты

    !-





                           - 175 -

                       00152-01 33 09-3


    !+

    !   описание

    !-

    DECLARE STRING BIN_STR

    DECLARE LONG BIN_VAL, I, RET_STATUS

    DECLARE LONG CONSTANT FLAGS = 17    ! 2^0 + 2^4

    EXTERNAL LONG FUNCTION OTS$CVT_TB_L (STRING, LONG, &

             LONG BY VALUE, LONG BY VALUE)

    !+

    !   главная программа

    !-



    !+

    !   читать данное, преобразовать его в двоичное

    !-

    FOR I = 1 TO 5

      READ BIN_STR

      RET_STATUS = OTS$CVT_TB_L(BIN_STR, BIN_VAL, '4'L, FLAGS

      PRINT BIN_STR;"TREATED AS A BINARY NUMBER EQUALS";

      BIN_VAL

    NEXT I

    !+

    !   выполнить, конец программы

    !-

  GO TO 32767

  999 дата "1111", "1 111", "1011011", "11111111", "00000000"

  32767 END




                           - 176 -

                       00152-01 33 09-3


       Данная  программа  на  языке  программирования  бейсик

  использует процедуру OTS$CVT_TB_L для преобразования двоич-

  ного текста в целое длинное слово.


       Результат выполнения данной программы следующий:

  1111 TREATED AS A BINARY NUMBER EQUALS 15

  1 111 TREATED AS A BINARY NUMBER EQUALS 15

  101011 TREATED AS A BINARY NUMBER EQUALS 91

  11111111 TREATED AS A BINARY NUMBER EQUALS 255

  00000000 TREATED AS A BINARY NUMBER EQUALS 0



       2.9. ОTS$CVT_TI_L      -      преобразование

            десятичной символьной строки в целое



       Данная процедура преобразует двоичную символьную стро-

  ку в коде КОИ-8 в целое значение в виде  байта,  слова  или

  длинного слова со знаком. Результатом по умолчанию является

  длинное слово.


       Формат:

       ОTS$CVT_TI_L   входная строка, величина, [, размер]

                      [, флаги]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)
               
       Доступ: только запись

       Механизм: посредством значения





                           - 177 -

                       00152-01 33 09-3


       Аргументы:


       Входная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора строки фиксированной

                 длины, посредством дескриптора  динамической

                 строки

       Введенная  строка  в  коде  КОИ-8,  которую  процедура

  OTS$CVT_TI_L преобразует в байт, слово или  длинное  слово.

  Аргумент входная строка является адресом дескриптора,  ука-

  зывающего введенную строку. Синтаксис  разрешенной  входной

  строки в коде КОИ-8 следующий:


        [+или-]<целые цифры>


       Процедура  OTS$CVT_TI_L  всегда  игнорирует  начальные

  пробелы. Десятичная точка размещается справа  от  введенной

  строки.


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только запись

       Механизм: посредством ссылки

       Целый байт, целое слово или целое  длинное  слово  (со

  знаком), в зависимости от аргумента размер. Аргумент  вели-

  чина является адресом целого значения.




                           - 178 -

                       00152-01 33 09-3


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово(со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер (в  байтах)  целой  величины.  Разрешенные  для

  аргумента размер значения 1,2  и  4.  Содержание  аргумента

  размер   определяет   будет   ли   создаваемое   процедурой

  OTS$CVT_TI_L целое значение баитом  и  словом  или  длинным

  словом.  Данный   аргумент   необязателен.   По   умолчанию

  устанавливается 4.


       Флаги

       Использование в МОС ВП:длинное слово маски

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством ссылки

       Обеспечиваемые пользователем флаги, которые  процедура

  OTS$CVT_TI_L использует для интерпретации пробелов и знаков

  табуляции.  Аргумент  флаги  является  длинным  словом  без

  знака. Данный аргумент не обязателен. По умолчанию все биты

  установлены и процедура OTS$CVT_TB_L игнорирует  пробелы  и

  знаки табуляции. Значения флагов приведены в табл.25.













                           - 179 -

                       00152-01 33 09-3


                                                  Таблица 25

   ---------------------------------------------------------

   Бит       !           Описание

   ---------------------------------------------------------

   0         ! Если установлен, процедура OTS$CVT_TI_L иг-

             ! норирует пробелы; если сброшен, процедура

             ! OTS$CVT_TI_L игнорирует начальные пробелы, но

             ! все пробелы после первого разрешенного сим-

             ! вола интерпретирует как нули

   4         ! Если установлен, процедура OTS$CVT_TI_L иг-

             ! норирует знаки табуляции; если сброшен, про-

             ! цедура OTS$CVT_TI_L интерпретирует знаки та-

             ! буляции как неправильные символы


       Возвращаемые значения состояния:

  SS$NORMAL

       - процедура успешно завершена;

  OTS$_INPCONERR

       - ошибка  преобразования;   неправильный   символ   во

         входной строке, переполнение сверху или неправильныи

         аргумент размер; аргумент  величина  устанавливается

         равным нулю.



       2.10. ОTS$CVT_TL_L      -      преобразование

             логической символьной строки в целое



       Данная процедура преобразует величину в формате L язы-

  ка программирования фортран, представленную в виде строки в



                           - 180 -

                       00152-01 33 09-3


  коде КОИ-8  в  целое  значение  в  виде  байта,  слова  или

  длинного слова. По умолчанию, результатом является  длинное

  слово.


       Формат:

       ОTS$CVT_TL_L   входная строка, величина [, размер]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово(без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Входная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора строки фиксированной

                 длины, посредством дескриптора динамической

                 строки

       Введенная строка, посредством дескриптора динамической

  строки  в  коде  КОИ-8,  которую   процедура   OTS$CVT_TL_L

  преобразует в целый байт, целое  слово  или  целое  длинное

  слово.   Аргумент   входная   строка    является    адресом

  дескриптора, указывающего введенную строку. Синтаксис вход-

  ных строк:






                           - 181 -

                       00152-01 33 09-3


       <нуль или более пробелов>

       <  <конец строки>

  или

       < <"." или нечего>

               <"T","F">

       <нуль или больше любых символов>

       <конец строки>>>


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только запись

       Механизм: посредством ссылки

       Целое значение, которое процедура OTS$CVT_TL_L  форми-

  рует при преобразовании символьной  строки  в  коде  КОИ-8.

  Аргумент величина является адресом данного целого значения.

  Аргумент величина равен -1, если  в  строке  указана  буква

  "Т", иначе аргумент величина равен 0.


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово(со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер  (в  байтах)  целого   значения.   Разрешенными

  значениями являются 1,2 и 4.  Содержание  аргумента  размер

  определяет будет  ли  создаваемое  процедурой  OTS$CVT_TL_L

  целое значение байтом, словом или  длинным  словом.  Данный




                           - 182 -

                       00152-01 33 09-3


  аргумент  необязателен.   По   умолчанию,   устанавливается

  значение 4.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_INPCONERR

       - неправильный   символ   во   входной   строке    или

         неправильный  аргумент  размер;  значение  аргумента

         величина устанавливается равным нулю.



       2.11. ОTS$CVT_TO_L-преобразование

             восьмеричной символьной строки в  целое

             без знака



       Данная процедура преобразует  восьмеричную  символьную

  строку  в  коде  КОИ-8,  в  целое   значение   без   знака,

  произвольной  длины.  По  умолчанию,  результатом  является

  длинное слово.


       Формат:

       ОTS$CVT_TO_L   входная строка, величина [, размер]

                      [, флаги]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово(без знака)

       Доступ: только запись

       Механизм: посредством значения



                           - 183 -

                       00152-01 33 09-3


       Аргументы:


       Входная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора строки фиксированной

                 длины, посредством дескриптора динамической

                 строки

       Введенная  строка,  которую   процедура   OTS$CVT_TO_L

  преобразует в целое значение без  знака.  Аргумент  входная

  строка является адресом дескритора, указывающего  введенную

  строку. Разрешенными символами являются пробелы и цифры  от

  0 до 7.


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только запись

       Механизм: посредством ссылки

       Целое значение, которое процедура OTS$CVT_TO_L  форми-

  рует при преобразовании введенной строки. Аргумент величина

  является адресом целого значения без знака.


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово(со знаком)

       Доступ: только чтение

       Механизм: посредством значения



                           - 184 -

                       00152-01 33 09-3


       Размер (в байтах)  целого  значения.  Если  содержимое

  аргумента   размер   является   нулем   или   отрицательным

  значением, процедура OTS$CVT_TL_L возвращает ошибку. Данный

  аргумент необязателен. По умолчанию, устанавливается 4.


       Флаги

       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Обеспечиваемые пользователем флаги, которые  процедура

  OTS$CVT_TO_L использует для интерпретации пробелов.  Значе-

  ния   флагов   приведены   в   табл.26.   Данный   аргумент

  необязателен. По умолчанию, все биты сброшены.

                                                  Таблица 26

   ---------------------------------------------------------

   Бит        !         Описание

   ---------------------------------------------------------

   0          ! Если установлен, процедура OTS$CVT_TO_L

              ! игнорирует все пробелы; если сброшен, проце-

              ! дура OTS$CVT_TO_L интерпретирует пробелы

              ! как нули


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_INPCONERR

       - ошибка входного преобразования: неправильный символ,




                           - 185 -

                       00152-01 33 09-3


         переполнение или неправильный аргумент размер.


       Пример.

  ОCTAL_CONV:PROCEDURE OPTIONS (MAIN) RETURNS (FIXED

             BINARY(31));

  %INCLUDE $STSDEF;   /* включить определение возвращаемо-

                         го значения состояния */

  DECLARE OTS$CVT_TO_L ENTRY  /* входная строка */

         (CHARACTER (*),

         FIXED BINARY (31),   /* возвращаемое значение */

         FIXED BINARY VALUE,  /* размер значения  */

         FIXED BINARY VALUE)  /* флаги */

         RETURNS (FIXED BINARY (31)) /* возвращаемое значение

                                        состояние */

         OPTIONS (VARIABLE);  /* аргументы могут быть опуще-

                                 ны */

  DECLARE INPUT CHARACTER (10);

  DECLARE VALUE FIXED BINARY (31);

  DECLARE SIZE FIXED BINARY (31) INITIAL(4) READONLY

          STATIC; /* длинное слово */

  DECLARE FLAGS FIXED BINARY (31) INITIAL(1) READONLY

          STATIC; /* игнорировать пробелы */

  ON ENDFILE (SYSIN) STOP;



  то WHILE ('1'В); /* цикл до конца файла */

       РUT SKIP (2);

       GET LIST (INPUT) OPTIONS (PROMPT ('OCTAL VALUE: '));

       STS$VALUE = OTS$CVT_TO_L (INPUT, VALUE, SIZE, FLAGS);



                           - 186 -

                       00152-01 33 09-3


       IF ^STS$SUCCESS THEN RETURN (STS$VALUE);

       РUT SKIT EDIT (INPUT, 'OCTAL EQUALS', VALUE,

       'DECIMAL') (A,X,A,X,F(10),X,A);

       ЕND;

  END OCTAL_CONV;


       Данный отрывок из программы на языке  программирования

  пл/1 переводит восьмеричную символьную строку в коде  КОИ-8

  в двоичное значение.


       Результат выполнения данной программы следующий:

       $ RUN OCTOL

       ОCTAL VALUE: 1

       1 OCTAL EQUALS 1 DECIMAL

       ОCTAL VALUE: 11

       11 OCTAL EQUALS 9 DECIMAL

       ОCTAL VALUE: 1017346

       1017346 OCTAL EQUALS 274150 DECIMAL

       ОCTAL VALUE: CTRL/Z



       2.12. ОTS$CVT_TU_L      -      преобразование

             десятичной символьной строки без  знака

             в целое


       Данная  процедура  преобразует  десятичную  символьную

  строку в коде КОИ-8 в байт, слово или  длинное  слово  (без

  знака). По умолчанию, результат  является  длинным  словом.

  Разрешенными символами являются пробел и цифры от 0 до 9.





                           - 187 -

                       00152-01 33 09-3


       Формат:

       ОTS$CVT_TU_L   входная строка, величина [, размер]

                      [, флаги]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово(без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Входная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора строки фиксированной

                 длины

       Введенная     восьмеричная      символьная      строка

  (фиксированнои длины), в коде КОИ-8. Аргумент входная стро-

  ка  является  адресом  дескриптора,  указывающего  вводимую

  строку.


       Величина

       Использование в МОС ВП: переменный аргумент

       Тип: неопределенный

       Доступ: только чтение

       Механизм: посредством ссылки

       Байт, слово или длинное слово  (зависит  от  аргумента




                           - 188 -

                       00152-01 33 09-3


  размер),  в  которое  процедура   OTS$CVT_TU_L   записывает

  преобразованное  значение.   Аргумент   величина   является

  адресом байта, слова или длинного слова.


       Размер

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово(со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер (в байтах) целой величины. Разрешенные значения

  1,2 и 4. Если определено какое-нибудь другое  значение  или

  аргумент размер опущен, процедура OTS$CVT_TU_L  использует,

  устанавливаемое по умолчанию, значение 4.


       Флаги

       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Обеспечиваемые пользователем флаги, которые  процедура

  OTS$CVT_TU_L использует для интерпретации пробелов и знаков

  табуляции. Данный аргумент необязателен. По умолчанию,  все

  биты сброшены. Значения флагов приведены в табл.27.














                           - 189 -

                       00152-01 33 09-3


                                                  Таблица 27

   ---------------------------------------------------------

   Бит     !            Описание

   ---------------------------------------------------------

   0       !  Если установлен, процедура OTS$CVT_TU_L игно-

           !  рирует пробелы; если сброшен, процедура

           !  OTS$CVT_TU_L интерпретирует пробелы как нули

   4       !  Если установлен, процедура OTS$CVT_TU_L игно-

           !  рирует знаки табуляции; если сброшен, проце-

           !  дура OTS$CVT_TU_L интерпретирует знаки табу-

           !  ляции как неправильные символы


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_INPCONERR

       - ошибка    преобразования:    неправильный    символ,

         переполнение или неправильный аргумент размер.



       2.13. ОTS$CVT_T_[Z] - преобразование числовой

             символьной   строки   в   значение    с

             плавающей запятой


       Данная процедура преобразует числовое значение, предс-

  тавленное в виде символьной строки в коде КОИ-8 в  величину

  с плавающей запятой форматов D,F,G и Н.


       Формат:

       ОTS$CVT_T_D   входная строка, величина, [, размер



                           - 190 -

                       00152-01 33 09-3


                     мантисы] [, масштабный коэффициент]

                     [, флаги][, добавочная точность]

       ОTS$CVT_T_F   входная строка, величина, [, размер

                     мантисы] [, масштабный коэффициент]

                     [, флаги][, добавочная точность]

       ОTS$CVT_T_G   входная строка, величина, [, размер

                     мантисы] [, масштабный коэффициент]

                     [, флаги][, добавочная точность]

       ОTS$CVT_T_H   входная строка, величина, [, размер

                     мантисы] [, масштабный коэффициент]

                     [, флаги][, добавочная точность]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово(без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Входная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора строки фиксированной

                 длины, посредством дескриптора динамической

                 строки


       Введенная  символьная  строка,   содержащая   числовое




                           - 191 -

                       00152-01 33 09-3


  значение в виде строки в коде КОИ-8. Аргумент входная стро-

  ка  является  адресом  дескритора,  указывающего   вводимую

  строку. Синтаксис входной строки следующий:

  <нуль или более пробелов>

  <"+","-" или ничего>

  <нуль или более десятичных цифр>

  <"." или ничего>

  <нуль или более десятичных цифр>

  <экспонента или ничего>,

  где экспонента: <<<"E","D","Q">

       <нуль или более пробелов>

       <"+","-" или ничего>>

       Или

       <"+" или "-">>

       <нуль или более десятичных цифр>>

  <конец строки>


       Величина

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата D,

            число с плавающей запятой формата F,

            число с плавающей запятой формата G,

            число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством ссылки

       Величина  с  плавающеи  запятой,   которую   процедура

  OTS$CVT_T_Z создает при  преобразовании  введенной  строки.

  Аргумент величина является  адресом  значения  с  плавающеи



                           - 192 -

                       00152-01 33 09-3


  запятой.  Для  процедуры  OTS$CVT_T_D  значением  аргумента

  величина является число с плавающей запятой формата D;  для

  процедуры OTS$CVT_T_F - число с плавающей  запятой  формата

  F; для процедуры OTS$CVT_T_G - число  с  плавающей  запятой

  формата G; для процедуры OTS$CVT_T_H -  число  с  плавающей

  запятой формата Н.


       Размер мантисы

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Число разрядов в мантиссе, если во входной строке  нет

  десятичной  запятой.  Данный  аргумент   необязателен.   По

  умолчанию, устанавливается 0.


       Масштабный коэффициент

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово(со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Масштабныи коэффициент. Если  бит  6  флагов  сброшен,

  масштабный коэффициент применяется в случае,  если  показа-

  тель является действиельным числом. Если бит 6  установлен,

  масштабный коэффициент применяется всегда. Данный  аргумент

  необязателен. По умолчанию, устанавливается 0.








                           - 193 -

                       00152-01 33 09-3


       Флаги

       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством значения


       Обеспечиваемые пользователем  флаги.  Значения  флагов

  приведены в табл.28.

                                                  Таблица 28

   ---------------------------------------------------------

     Бит   !           Описание

   ---------------------------------------------------------

   0       ! Если установлен, процедура OTS$CVT_T_[Z] игно-

           ! рирует пробелы, иначе процедура OTS$CVT_T_[Z]

           ! интерпретирует пробелы как нули

   1       ! Если установлен, используется только показатель

           ! Е, иначе - Е, D, Q

   2       ! Если установлен, процедура OTS$CVT_T_[Z] интер-

           ! претирует переполнение снизу как ошибку, ина-

           ! че, процедура OTS$CVT_T_[Z] не интерпретирует

           ! переполнение снизу как ошибку

   3       ! Если установлен, процедура OTS$CVT_T_[Z] усе-

           ! кает значение, иначе, процедура OTS$CVT_T_[Z]

           ! округляет значение

   4       ! Если установлен, процедура OTS$CVT_T_[Z] игно-

           ! рирует знаки табуляции, иначе, процедура

           ! OTS$CVT_T_[Z] интерпретирует знаки табуляции




                           - 194 -

                       00152-01 33 09-3


                                        Продолжение табл. 28

   ---------------------------------------------------------

     Бит   !           Описание

   ---------------------------------------------------------

           ! как неправильные символы

   5       ! Если установлен, показатель должен начинаться

           ! с разрешенной буквы, иначе показатель может

           ! быть опущен

   6       ! Если установлен, используется масштабный коэф-

           ! фициент, иначе, процедура OTS$CVT_T_[Z] приме-

           ! няет масштабный коэффициент, только если пока-

           ! затель является действительным числом


       Добавочная точность

       Использование в МОС ВП: слово со знаком

       Тип: целое слово(со знаком)

       Доступ: только запись

       Механизм: посредством ссылки

       Биты добавочнои точности. Аргумент добавочная точность

  является  адресом  целого  слова  со  знаком.  Если  данный

  аргумент представлен, аргумент величина не  округляется,  а

  первые  N  битов  после  усечения  возвращаются  в   данном

  аргументе. Для чисел с плавающей запятой формата D и F чис-

  ло N равно 8 и биты возвращаются как байт. Для чисел с пла-

  вающей запятой форматов G  и  Н  число  N  равно  11  и  15

  соответственно, и биты возвращаются как слово,  выравненное

  слева. Биты дополнительнои точности, возвращаемые для чисел

  с плавающей запятой формата н могут быть неточными, так как



                           - 195 -

                       00152-01 33 09-3


  при вычислении переносится только 128 битов.


       Описание.

       Процедуры  OTS$CVT_T_D,  OTS$CVT_T_F,  OTS$CVT_T_G   и

  OTS$CVT_T_H поддерживают  входные  утверждения  для  языков

  программирования Бейсик и Фортран.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_INPCONERR

       - ошибка  преобразования:   неправильный   символ   во

         входнои строке, или значение  лежит  за  допустимыми

         пределами. Возвращаемое значение +0,0.


       Пример.

  С+

  С  данная программа на языке программироавния Фортран

  С  использует процедуру OTS$CVT_T_F

  С-

       REAL*4 А

       СHARACTER*10 Т(5)

       DATA Т/'1234567+23','8,786534+3','-983476Е-3',

              '-23,734532','45'/

       DO 2 I = 1, 5

       ТYPE 1, I, T(I)

   1   FORMAT(,INPUT STRING',I1,'A10)

  С+

  С  в-возвращаемое значение состояния.T(I)-CTPOKA, преобра-



                           - 196 -

                       00152-01 33 09-3


  С  зуемая в значение с плавающей запятой формата F. А -

  С  преобразование с плавающей запятой формата F строки

  С  T(I). %VAL(5) означает, что в мантиссе 5 цифр, если во

  С  входнои строке T(I) нет десятичной запятой.
   
  С-

       В = OTS$CVT_T_F(T(I), А, %VAL(5)'')

       ТYPE *,' OUTPUT OF OTS$CVT_T_F IS     ', А

       ТYPE *, ''

  2    CONTINUE

       ЕND


       Результат выполнения данной программы следующий:

  INPUT STRING 1 IS 1234567+23

   OUTPUT OF OTS$CVT_T_F IS         1,2345669Е+24

  INPUT STRING 2 IS 8,786534+3

   OUTPUT OF OTS$CVT_T_F IS         8786,534

  INPUT STRING 3 IS -983476Е-3

   OUTPUT OF OTS$CVT_T_F IS        -9,8347599Е-03

  INPUT STRING 4 IS -23,734532

   OUTPUT OF OTS$CVT_T_F IS        -23,73453

  INPUT STRING 5 IS 45

   OUTPUT OF OTS$CVT_T_F IS         45000,00















                           - 197 -

                       00152-01 33 09-3


       2.14. ОTS$CVT_TZ_L      -      преобразование

             шестнадцатеричной символьной  строки  в

             целое без знака


       Данная процедура  преобразует  шестнадцатеричную  сим-

  вольную строку в коде КОИ-8, в  целое  значение  без  знака

  произвольной  длины.  По  умолчанию,  результатом  является

  длинное слово.


       Формат:

       ОTS$CVT_TZ_L   входная строка, величина [, размер]

                      [, флаги]


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово(без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Входная строка

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора строки

                 фиксированной длины, посредством

                 дескриптора динамическои строки







                           - 198 -

                       00152-01 33 09-3


       Вводимая  строка.  Аргумент  входная  строка  является

  адресом   дескриптора,   указывающего    входную    строку.

  Разрешенными символами являются пробел и цифры от 0 до 9, а

  также буквы от а до F.


       Величина

       Использование в МОС ВП: переменная

       Тип: неопределенный

       Доступ: только запись

       Механизм: посредством ссылки

       Целое значение,  создаваемое  процедурой  OTS$CVT_TZ_L

  при  преобразовании  входной  строки.   Аргумент   величина

  является адресом целого значения.


       Размер

       Использование в МОС ВП:длинное слово со знаком

       Тип: целое длинное слово(со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Размер (в  байтах)  целой  величины.  Данный  аргумент

  необязателен. По умолчанию, устанавливается 4.


       Флаги

       Использование в МОС ВП: длинное слово маски

       Тип: длинное слово(без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Обеспечиваемые пользователем флаги, которые  процедура

  OTS$CVT_TZ_L   использует   для   интерпретации   пробелов.



                           - 199 -

                       00152-01 33 09-3


  аргумент  флаги  является   длинным   словом   без   знака,

  содержащим флаги. Данный аргумент необязателен. По  умолча-

  нию,  все  биты  сброшены.  Значение  флагов  приведено   в

  табл.29.

                                                  Таблица 29

  ----------------------------------------------------------

       Бит      !              Описание

  ----------------------------------------------------------

       0        !  Если установлен, процедура OTS$CVT_TZ_L

                !  игнорирует пробелы; иначе, процедура

                !  OTS$CVT_TZ_L интерпретирует пробелы как

                !  нули.


       Возвращаемые значения состояния:

  SS$_NORMAL

       - процедура успешно завершена;

  OTS$_INPCONERR

       - ошибка    преобразования:    неправильный    символ,

         переполнение или неверныи аргумент размер.


       Пример 1.

  10   !+

       !  данная программа на языке программирования бейсик

       !  преобразует шестнадцатеричную символьную строку

       !  в длинное слово

       !-



      EXTERNAL LONG FUNCTION OTS$CVT_TZ_L




                           - 200 -

                       00152-01 33 09-3


      EXTERNAL LONG CONSTANT OTS$_INPCONERR

      INPUT "ENTER НЕХ NUMERIC";HEXVAL$

      RET_STAT% = OTS$CVT_TZ_L(HEXVAL$, НЕХ%)

      PRINT "CONVERSION ERROR " IF RET_STAT% = OTS$INPCONERR

      PRINT "DECIMAL VALUE OF ";HEXVAL$;" IS";HEX%

            IF RET_STAT% <>OTS$_INPCONERR


       Результат выполнения данной программы на  языке  прог-

  раммирования бейсик, следующий:

       $ RUN HEX

       ЕNTER НЕХ NUMERIC? А

       DECIMAL VALUE OF А IS 10


       Пример 2.

  НEX_CONV: PROCEDURE OPTIONS (MAIN) RETURNS (FIXED

            BINARY (31));

  %INCLUDE $STSDEF: /* включить определение возвращаемого

                       значения состояния */

  DECLARE OTS$CVT_TZ_L ENTRY

     (CHARACTER (*),     /* входная строка */

     FIXED BINARY (31),  /* возвращаемое значение */

     FIXED BINARY VALUE, /* размер возвращаемого значения */

     FIXED BINARY VALUE) /* флаги   */

     RETURNS (FIXED BINARY (31))  /* возвращаемое значение

                                     состояния */

     OPTIONS (VARIABLE); /* аргументы могут быть опущены  */

  DECLARE INPUT CHARACTER (10);

  DECLARE VALUE FIXED BINARY (31);




                           - 201 -

                       00152-01 33 09-3


  DECLARE FLAGS FIXED BINARY (31) INITIAL(1) READONLY STATIC;

                                  /* игнорировать пробелы */

  ON ENDFILE (SYSIN) STOP;

  DO WHILE ('1'В);     /* непрерывный цикл до конца файла */

     PUT SKIP (2);

     GET LIST (INPUT) OPTIONS (PROMPT ('НЕХ VALUE: '));



     STS$VALUE = OTS$CVT_TZ_L (INPUT, VALUE, FLAGS);

     IF ^STS$SUCCESS THEN RETURN (STS$VALUE);

     PUT SKIP EDIT (INPUT, 'НЕХ EQUALS', VALUE, 'DECIMAL')

                    (A,X,A,X,F(10),X,A);

     END;

  END HEX_CONV;


       Данная программа на языке программирования Пл/1  пере-

  водит шестнадцатиричную символьную строку в  коде  КОИ-8  в

  двоичное значение.  Данная  программа  продолжает  выдавать

  подсказку  для  входных   значении   до   тех   пор,   пока

  пользователь не напечатает CTRL/Z.


       Результат выполнения данной программы следующий:

       $ RUN НЕХ

       НЕХ VALUE: 1А

       1А   НЕХ EQUALS      26 DECIMAL

       НЕХ VALUE: С

       С    НЕХ EQUALS      12 DECIMAL

       НЕХ VALUE: CTRL/Z






                           - 202 -

                       00152-01 33 09-3


       2.15. ОTS$DIVC[Z] - комплексное деление



       Процедуры  OTS$DIVC,   OTS$DIVCD_R3   и   OTS$DIVCG_R3

  возвращают комплексныи результат деления комплексных чисел.


       Формат:

       ОTS$DIVC      делимое, делитель

       ОTS$DIVCD_R3  делимое, делитель

       ОTS$DIVCG_R3  делимое, делитель


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Комплексный результат комплексного деления.  Процедура

  OTS$DIVC возвращает число с плавающей  запятой  формата  F;

  процедура OTS$DIVCD_R3 - число с плавающей запятой  формата

  D; процедура  OTS$DIVCG_R3  -  число  с  плавающей  запятой

  формата G.


       Аргументы:


       Делимое

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение




                           - 203 -

                       00152-01 33 09-3


       Механизм: посредством значения

       Комплексное   делимое.   Аргумент   делимое   содержит

  комплексное значение с  плавающей  запятой.  Для  процедуры

  OTS$DIVC значением аргумента делимое  является  комплексное

  число  с  плавающей  запятой  формата  F;   для   процедуры

  OTS$DIVCD_R3  -  комплексное  число  с  плавающей   запятой

  формата D; для процедуры OTS$DIVCG_R3 - комплексным число с

  плавающей запятой формата G.


       Делитель

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством значения

       Комплексный делитель. Для процедуры OTS$DIVC  значение

  аргумента делитель является комплексным числом с  плавающей

  запятой формата F; для процедуры OTS$DIVCD_R3 - комплексным

  числом  с  плавающей  запятой  формата  D;  для   процедуры

  OTS$DIVCG_R3  -  комплексным  числом  с  плавающей  запятой

  формата G.


       Описание.

       Данные  процедуры  вычисляют   комплексныи   результат

  деления   комплексных    чисел.    Комплексный    результат

  вычисляется следующим образом:






                           - 204 -

                       00152-01 33 09-3


       R = (AC+BD)/(CC+DD)   I = (BC-AD)/(CC+DD),      (89)

   где (А,В) - делимое:  а - действительная часть,

       В - мнимая часть;

       (C,D) - делитель: с - действительная часть,

       D - мнимая часть;

       (R,I) - частное:  R - действительная часть,

       I - мнимая часть.


       Сигнализируемые значения состояния:

  SS$_FLTDIV_F

       - арифметическая ошибка. Деление на нуль;

  SS$_FLTOV_F

       - арифметическая ошибка. Переполнение сверху  чисел  с

         плавающей запятой.


       Пример 1.

  С+

  С  данная  программа на языке программирования Фортран

  С  формирует комплекное частное двух комплексных чисел,

  С  используя процедуру OTS$DIVC и генератор псевдо-

  С  случайных чисел RAN

  С

  С  описать Z1,Z2,Z_Q и OTS$DIVC как комплексные величи-

  С  ны. ОTS$DIVC возвратит комплексное частное: = OTS$DIVC

  С  ( %VAL(REAL(Z1)), %VAL(AIMAG(Z1), % VAL(REAL(Z2)),

  С  %VAL(AIMAG(Z2))

  С-

         COMPLEX Z1, Z2, Z_Q, OTS$DIVC




                           - 205 -

                       00152-01 33 09-3


  С+

  С  сгенерировать комплексное число

  С-

         Z1 = (8,0; 4,0)

  С+

  С  сгенерировать другое комплексное число

  С-

         Z2 = (1,0; 1,0)

  С+

  С  вычислить

  С-

         Z_Q = OTS$DIVC( %VAL(REAL(Z1), %VAL(AIMAG(Z1),

                         %VAL(REAL(Z2), %VAL(AIMAG(Z2))

         TYPE *, ' ТНЕ COMPLEX QUOTIENT OF',Z1,' DIVIDED BY',

         TYPE *,   Z2,' IS:'

         TYPE *, '     ',Z_Q

         END



       Результат выполнения данной программы:


  ТНЕ COMPLEX QUOTIENT OF (8,000000;4,000000) DIVIDED BY

  (1,000000;1,000000) IS:(6,000000;-2,000000)


       Пример 2.

  С+

  С  данная программа на языке программирования фортран фор-

  С  мирует комплексное частное двух комплексных чисел, ис-

  С  пользуя процедуру OTS$DIVCG_R3 и генератор псевдослу-




                           - 206 -

                       00152-01 33 09-3


  С  чайных чисел RAN.

  С

  С  описать Z1,Z2, и Z_Q как комплексные величины.

  С  OTS$DIVCG_R3 возвратит комплексное частное Z_Q = CZ1/Z2

  С-

        COMPLEX*16 Z1,Z2,Z_Q

  С+

  С  сгенерировать комплексное число.

  С-

        Z1 = (8,0;4,0)

  С+

  С  сгенерировать другое комплексное число.

  С-

        Z2 = (1.0;1.0)

  С+

  С  вычислить комплексное частное Z1/Z2.

  С-

        Z_Q = Z1/Z2

        TYPE *, ' ТНЕ COMPLEX QUOTIENT OF',Z1,'

        DIVIDED BY ',Z2,' IS:'

        TYPE *,'    ',Z_Q

        END

       Результат выполнения данной программы:


        ТНЕ COMPLEX QUOTIENT OF (8,000000000000000;

        4,000000000000000) DIVIDED BY

        (1,000000000000000;1,000000000000000) IS:

        (6,000000000000000;-2,000000000000000)



                           - 207 -

                       00152-01 33 09-3


       2.16. ОTS$DIV_PK_LONG  -  деление  десятичных

             чисел в упакованном формате  с  длинным

             делителем


       Данная процедура производит деление десятичных чисел в

  упакованном формате, когда требования точности  и  масштаба

  для  частного  требуют  деления  с  увеличенной  точностью.

  Делитель должен иметь точность в тридцать или тридцать одну

  цифру.


       Формат:


        OTS$DIV_PK_LONG делимое, делитель, точность делителя,

                        частное, точность частного,

                        добавочная точность, масштаб


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Делимое

       Использование в МОС ВП: адрес

       Тип: десятичная строка в упакованном формате

       Доступ: только чтение

       Механизм: посредством ссылки

       Делимое. Аргумент делимое является адресом  десятичной




                           - 208 -

                       00152-01 33 09-3


  строки  в  упакованном  формате.  Аргумент  делимое  всегда

  умножается на (10**С), где С=(31-точность делимого).


       Делитель

       Использование в МОС ВП: адрес

       Тип: десятичная строка в упакованном формате

       Доступ: только чтение

       Механизм: посредством ссылки

       Делитель.   Аргумент   делитель    является    адресом

  десятичной строки в упакованном формате.


       Точность делителя

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Точность делителя. Аргумент точность делителя является

  целым словом со знаком. Биты старших  разрядов  заполняются

  нулями.


       Частное

       Использование в МОС ВП: адрес

       Тип: десятичная строка в упакованном формате

       Доступ: только запись

       Механизм: посредством ссылки

       Частное. Аргумент частное является адресом  десятнчной

  строки в упакованном формате.







                           - 209 -

                       00152-01 33 09-3


       Точность частного

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Точность частного. Аргумент точность частного является

  целым словом со знаком. Биты старших  разрядов  заполняются

  нулями.


       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Добавочные   цифры   требуемой   точности.    Аргумент

  добавочная точность является целым словом со знаком. Проце-

  дура OTS$IV_PK_LONG вычисляет аргумент добавочная  точность

  следующим образом:


       Добавочная точность = размер (частного) +

       + размер (делителя) - размер (делимого) -31 +

       + точность (делимого)                            (90)


       Масштаб

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Аргумент масштаб является целым словом  со  знаком.  В

  процедуре  OTS$DIV_PK_LONG  аргумент  масштаб  определяется



                           - 210 -

                       00152-01 33 09-3


  следующим образом:


        масштаб данных=31-точность значения


       Описание.

       Перед  использованием  данной   процедуры   необходимо

  определить,  что  эффективнее:  процедура  OTS$DIV_PK_LONG,

  процедура OTS$DIV_PK_SHORT или  инструкция  DIVP.  Правиль-

  ность выбора процедуры можно проверить по табл.30.

                                                   Таблица 30

  -----------------------------------------------------------

    Масштабный   !  Размер (частного) +   !   Используемая

   коэффициент   !  размер (делителя) -   !   процедура

                 !  размер (делимого) +   !

                 !  точность (делимого)   !

  -----------------------------------------------------------

     <=1         !         >31            ! OTS$DIV_PK_LONG

                 !                        !

                 !         <31            ! DIVP

                 !                        !

     >1          !                        ! OTS$DIV_PK_SHORT



       Сигнализируемые значения состояния:

  SS$_FLTDIV

       - неустранимая ошибка. Деление на нуль.










                           - 211 -

                       00152-01 33 09-3


       Пример.


  ОPTION

        TYPE = EXPLICIT

  !+

  !  данная программа использует процедуру OTS$DIV_PK_LONG

  !  для выполнения десятичной арифметики.

  !-

  !+

  !  описания

  !-

  DECLARE DECIMAL (31,2)   NATIONAL_DEBT

  DECLARE DECIMAL (30,3)   POPULATION

  DECLARE DECIMAL (10,5)   PER_CAPITA_DEBT

  EXTERNAL SUB OTS$DIV_PK_LONG (DECIMAL(31,2),DECIMAL(30,3),&

  WORD BY VALUE, DECIMAL(10,5),WORD BY VALUE, WORD BY VALUE,&

  WORD BY VALUE)

  !+

  !  подсказать пользователю требуемый ввод.

  !-

  INPUT  "ENTER NATIONAL DEBT: ";NATIONAL_DEBT

  INPUT  "ENTER CURRENT POPULATION:";POPULATION

  !+

  !  выполнить деление и напечатать результат.

  !

  !  SCALE(DIVD) = 2

  !  SCALE(DIVR) = 3

  !  SCALE(QUOT) = 5



                           - 212 -

                       00152-01 33 09-3


  !

  !  PREC(DIVD) = 31

  !  PREC(DIVR) = 30

  !  PREC(QUOT) = 10

  !

  !  PREC-DATA = SCALE(QUOT) + SCALE(DIVR) - SCALE(DIVD) -

  !              31 + PREC(DIVD)

  !

  !  PREC-DATA = 5   + 3   -  2  -31+  31

  !  PREC-DATA = 6

  !  В = SCALE(QUOT) + SCALE(DIVR) - SCALE(DIVD) + PREC(DIVD)

  !  В =  5   +  3   -   2  +  31

  !  В = 37

  !

  !  С = 31 - PREC(DIVD)

  !  С = 31 - 31

  !  С = 0

  !

  !  SCALE-DATA = 31 - PREC(DIVR)

  !  SCALE-DATA = 31 -  30

  !  SCALE-DATA = 1

  !

  !  В больше чем 31, поэтому для выполнения деления может

  !  быть использована или процедура OTS$DIV_PK_LONG, или

  !  процедура OTS$DIV_PK_SHORT.ECли в меньше или равно 31,

  !  тогда может быть использована инструкция DIVP.

  !  если SCALE_DATA меньше или равно 1, то может быть ис-




                           - 213 -

                       00152-01 33 09-3


  !  пользована процедура OTS$DIV_RK_LONG вместо процедуры

  !  OTS$DIV_RK_SHORT.

  !-

  CALL OTS$DIV_RK_LONG( NATIONAL_DEBT, POPULATION, '30'W,&

  PER_CAPITA_DEBT, '10'W, '6'W, '1'W)

  PRINT "ТНЕ PER CAPITA DEBT IS: ":PER_CAPITA_DEBT

  END


       Результат выполнения данной программы следующий:

       $RUN DEBT

       ЕNTER NATIONAL DEBT:  12345678

       ЕNTER CURRENT POPULATION: ? 1212

       ТНЕ PER CAPITA DEBT IS: 10186,20297



       2.17. ОTS$DIV_PK_SHORT -  деление  десятичных

             чисел в упакованном формате с  коротким

             делителем


       Данная процедура производит деление десятичных чисел в

  упакованном формате, когда требования точности  и  масштаба

  для  частного  требуют  деления  с  увеличенной  точностью.

  Делитель должен иметь максимальную точность в 29 цифр.


       Формат:

       ОTS$DIV_PK_SHORT делимое, делитель, точность делителя,

                        частное, точность частного, добавоч-

                        ная точность







                           - 214 -

                       00152-01 33 09-3


       Код возврата:

       Использование в МОС ВП: значение состояния

       Тип: длинное слово (без знака)

       Доступ: только запись

       Механизм: посредством значения


       Аргументы:


       Делимое

       Использование в МОС ВП: адрес

       Тип: десятичная строка в упакованном формате

       Доступ: только чтение

       Механизм: посредством ссылки

       Делимое. Аргумент делимое является адресом  десятичной

  строки  в  упакованном  формате.  Аргумент  делимое  всегда

  умножается на (10**С), где С = 31 - точность (делимого)


       Делитель

       Использование в МОС ВП: адрес

       Тип: десятичная строка в упакованном формате

       Доступ: только чтение

       Механизм: посредством ссылки

       Делитель.   Аргумент   делитель    является    адресом

  десятичной строки в упакованном формате.


       Точность делителя

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение




                           - 215 -

                       00152-01 33 09-3


       Механизм: посредством значения

       Точность делителя. Аргумент точность делителя является

  целым словом со знаком. Биты старших  разрядов  заполняются

  нулями.


       Частное

       Использование в МОС ВП: адрес

       Тип: десятичная строка в упакованном формате

       Доступ: только запись

       Доступ: только запись

       Механизм: посредством ссылки

       Частное. Аргумент частное является адресом  десятичной

  строки в упакованном формате.


       Точность частного

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Точность частного. Аргумент точность частного является

  целым словом со знаком. Биты старших  разрядов  заполняются

  нулями.


       Добавочная точность

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения





                           - 216 -

                       00152-01 33 09-3


       Добавочные   цифры   требуемой   точности.    Аргумент

  добавочная точность является целым словом со знаком. Проце-

  дура   OTS$DIV_PK_SHORT   вычисляет   аргумент   добавочная

  точность следующим образом:


       Добавочная точность = размер (частного) +

       + размер (делителя) - размер(делимого) - 31 +

       + точность (делимого)


       Описание.

       Перед  использованием   этой   процедуры,   необходимо

  определить,  что  эффективнее:  процедура  OTS$DIV_PK_LONG,

  процедура OTS$DIV_PK_SHORT или  инструкция  DIVP.  Правиль-

  ность выбора процедуры (см. табл.30).


       Сигнализируемые значения состояния:

  SS$_FLTDIV

       - неустранимая ошибка. Деление на нуль.



       2.18. ОTS$MOVE3  -   пересылка   данных   без

             заполнения


       Данная   процедура   пересылает   до   2**31-1    байт

  (2147483647 байт) из исходного адреса в назначенный адрес.


       Формат:

       ОTS$MOVE3 длина, источник, приемник









                           - 217 -

                       00152-01 33 09-3


       Точка входа JSB:

       ОTS$MOVE3_R5


       Код возврата:

       Не существует


       Аргументы:


       Длина

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово ( со знаком )

       Доступ: только чтение

       Механизм: посредством значения

       Число  байт  данных,  которые  необходимо   переслать.

  Значение аргумента длина  находится  в  пределах  от  0  до

  2147483647 байт.


       Источник

       Использование в МОС ВП: байт без знака

       Тип: байт (без знака )

       Доступ: только чтение

       Механизм: посредством ссылки, массива ссылок

       Данные, пересылаемые  процедурой  OTS$MOVE3.  Аргумент

  источник содержит адрес байта.


       Приемник

       Использование в МОС ВП: байт без знака

       Тип: байт (без знака)

       Доступ: только запись





                           - 218 -

                       00152-01 33 09-3


       Механизм: посредством ссылки, массива ссылок

       Аргумент приемник  является  адресом  массива  байтов,

  куда процедура OTS$MOVE3 записывает пересылаемые данные.


       Описание.

       Процедура OTS$MOVE3 выполняет ту  же  функцию,  что  и

  инструкция MOVC3, за исключением того, что  аргумент  длина

  является целым длинным словом. При вызове  процедуры  через

  точку входа JSB, содержимое регистров аналогично содержимо-

  му регистров после выполнения инструкции MOVC3:


     - R0  =   0;

     - R1  =   адрес первого байта за пределами исходной

               строки;

     - R2  =   0;

     - R3  =   адрес одного байта за пределами строки

               назначения;

     - R4  =   0;

     - R5  =   0.


       Возвращаемые значения состояния:

       Не существует.



       2.19. ОTS$MOVE5   -   пересылка   данных    с

             заполнением


       Данная   процедура   пересылает   до   2**31-1    байт

  (2147483647 байт) из исходного адреса в назначенный адрес с

  заполнением. Перекрытие исходной и назначенной областей  не




                           - 219 -

                       00152-01 33 09-3


  влияет на результат.


       Формат:

       ОTS$MOVE5  длина источника, источник, символ запол-

                  нения, длина приемника, приемник


       Точка входа JSB:

       ОTS$MOVE5_R5


       Код возврата:

       Не существует


       Аргументы:


       Длина источника

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством значения

       Число  байт  данных,  которые  необходимо   переслать.

  Аргумент длина источника содержит целое  длинное  слово  со

  знаком. Значение  аргумента  длина  источника  находится  в

  интервале от 0 до 2147483647.


       Источник

       Использоваие в МОС ВП: байт без знака

       Тип: байт (без знака)

       Доступ: только чтение

       Механизм: посредством ссылки, массива ссылок

       Данные,  которые  пересылаются  процедурой  OTS$MOVE5.




                           - 220 -

                       00152-01 33 09-3


  аргумент источник содержит адрес массива байт.


       Символ заполнения

       Использование в МОС ВП: байт без знака

       Тип: байт (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Символ, используемый для заполнения, если длина источ-

  ника меньше, чем длина приемника. Аргумент символ  заполне-

  ния содержит адрес байта.


       Длина приемника

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово ( со знаком )

       Доступ: только чтение

       Механизм: посредством значения

       Размер области назначения  в  байтах.  Аргумент  длина

  приемника является целым длинным словом со знаком. Значение

  длина приемника находится в интервале от 0 до 2147483647.


       Приемник

       Использование в МОС ВП: байт без знака

       Тип: байт ( без знака )

       Доступ: только запись

       Механизм: посредством ссылки, массива ссылок

       Аргумент приемник является адресом массива байт,  куда

  процедура OTS$MOVE5 запишет пересылаемые данные.







                           - 221 -

                       00152-01 33 09-3


       Описание.

       Процедура OTS$MOVE5 выполняет ту  же  функцию,  что  и

  инструкция MOVC5. При вызове процедуры  через  точку  входа

  JSB, содержимое регистров аналогично содержимому  регистров

  после выполнения инструкции MOVC5:


     - R0  =  число неперемещаемых байт, остающихся в исход-

              ной строке;

     - R1  =  адрес одного байта за пределами исходной стро-

              ки;

     - R2  =  0;

     - R3  =  адрес одного байта за пределами назначенной

              строки;

     - R4  =  0;

     - R5  =  0.


       Возвращаемые значения состояния:

       Не существуют.



       2.20. ОTS$MULC[Z] - комплексное умножение


       Процедуры  OTS$MULCD_R3   и   OTS$MULCG_R3   вычисляют

  комплексное произведение двух комплексных величин.


       Формат:


       ОTS$MULCD_R3  множимое, множитель

       ОTS$MULCG_R3  множимое, множитель







                           - 222 -

                       00152-01 33 09-3


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Комплексный  результат  умножения   двух   комплексных

  чисел. Процедура OTS$MULCD_R3 возвращает комплексное  число

  с  плавающей  запятой  формата  D.  Процедура  OTS$MULCG_R3

  возвращает комплексное число с плавающей запятой формата G.


       Аргументы:


       Множимое

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством значения

       Комплексное множимое. Для процедуры OTS$MULCD_R3  зна-

  чение аргумента множимое является комплексным числом с пла-

  вающей запятой формата  D.  Для  процедуры  OTS$MULCG_R3  -

  комплексным числом с плавающей запятой формата G.


       Множитель

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G





                           - 223 -

                       00152-01 33 09-3


       Доступ: только чтение

       Механизм: посредством значения

       Комплексный множитель. Для процедуры OTS$MULCD_R3 зна-

  чение аргумента множитель  является  комплексным  числом  с

  плавающей запятой формата D. Для процедуры  OTS$MULCG_R3  -

  комплексным числом с плавающей запятой формата G.


       Описание.

       Процедуры  OTS$MULCD_R3   и   OTS$MULCG_R3   вычисляют

  комплексное произведение двух комплексных чисел.

       Комплексное   произведение    вычисляется    следующим

  образом:

        R = АС - BD   I = AD - ВС,                      (91)

  где (А, В) - комплексное множимое;

      (С, D) - комплексный множитель;

      (R, I) - комплексное произведение;


       Сигнализируемые значения состояния:

  MTH$_FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервированный операнд

         с плавающей запятой представляет собой отрицательный

         нуль (-0,0). Зарезервировано для дальнейшего исполь-

         зования.


       Пример.

  С+

  С



                           - 224 -

                       00152-01 33 09-3


  С  данная программа на языке программирования Фортран вы-

  С  числяет произведение двух комплексных чисел, используя

  С  процедуру OTS$MULCD_R3 и генератор псевдослучайных чи-

  С  сел RAN.

  С

  С  описать Z1, Z2 и Z_Q как комплексные величины.

  С  OTS$MULCD_R3 возвратит комплексное произведение Z1,

  С  умноженного на Z2

  С-

        COMPLEX*16 Z1, Z2, Z_Q

  С+

  С  сгенерировать комплексное число.

  С-

        Z1 = (8,0; 4,0)

  С+

  С  сгенерировать другое комплексное число

  С-

        Z2 = (2,0; 3,0)

  С+

  С  вычислить комплексное произведение ZI*Z2

  С -

       Z_Q = Z1 * Z2

       ТYPE *,'ТНЕ COMPLEX PRODUCT OF', Z1,' TIMES ',Z2,'IS:'

        TYPE * ,'      ',Z_Q

        END

       Результат выполнения данной программы:






                           - 225 -

                       00152-01 33 09-3


        ТНЕ COMPLEX PRODUCT OF (8,000000000000000;

        4,000000000000000) TIMES (2,000000000000000;

        3,000000000000000) IS:      (4.000000000000000;

        32,000000000000000)



       2.21. ОTS$POWC[Z]C[Z]      -       возведение

             комплексного  основания  в  комплексную

             степень


       Процедуры OTS$POWCC, OTS$POWCDCD_R3  и  OTS$POWCGCG_R3

  вычисляют результат  возведения  комплексного  основания  в

  комплексную степень.


       Формат:

       ОTS$POWCC       основание, степень

       ОTS$POWCDCD_R3  основание, степень

       ОTS$POWCGCG_R3  основание, степень


       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только запись

       Механизм: посредством значения

       Результат   возведения   комплексного   основания    в

  комплексную   степень.   Процедура   OTS$POWCC   возвращает

  комплексное число с плавающей запятой формата F.  Процедура

  OTS$POWCDCD_R3 - комплексное число с плавающей запятой фор-



                           - 226 -

                       00152-01 33 09-3


  мата D. Процедура OTS$POWCGCG_R3 - комплексное число с пла-

  вающей запятой формата G.


       Аргументы:


       Основание

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством значения

       Комплексное основание. Для процедуры OTS$POWCC  значе-

  ние аргумента основание является комплексным числом с  пла-

  вающей запятой формата F. Для  процедуры  OTS$POWCDCD_R3  -

  комплексным числом с плавающей запятой формата G; для  про-

  цедуры OTS$POWCGCG_R3  -  комплексным  числом  с  плавающей

  запятой формата D.

       Степень


       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством значения

       Комплексная степень. Для процедуры OTS$POWCC  значение

  аргумента степень является комплексным числом  с  плавающей

  запятой  формата  F;   для   процедуры   OTS$POWCDCD_R3   -



                           - 227 -

                       00152-01 33 09-3


  комплексным числом с плавающей запятой формата D. Для  про-

  цедуры OTS$POWCGCG_R3  -  комплексным  числом  с  плавающей

  запятой формата G.


       Описание.

       Процедуры OTS$POWCC, OTS$POWCDCD_R3  и  OTS$POWCGCG_R3

  возвращают результат возведения  комплексного  основания  в

  комплексную степень.


       Х = СЕХР (Y* CLOG(X)),                   (92)

       Где Х и Y комплексные значения


       Возвращаемые значения состояния:

  MTH$_INVARGMAT

       - неверный аргумент. Основание равно (0,0);

  MTH$FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  SS$_ROPRAND

       - зарезервированный операнд. Зарезервировано для даль-

         нейшего использования.



       Пример 1.

  С+

  С данная программа на языке программирования фортран форми-

  С рует результат возведения комплексного основания в ком-

  С плексную степень, используя процедуру OTS$POWCC.

  С

  С описать Z1, Z2, Z3  и OTS$POWCC как комплексные величины.

  С тогда OTS$POWCC возвратит комплексный результат ZI**Z2



                           - 228 -

                       00152-01 33 09-3


  С+

        COMPLEX Z1, Z2, Z3, OTS$POWCC

  С+

  С сгенерировать комплексное основание

  С-

        ZI = (2,0, 3,0)

  С+

  С сгенерировать комплексную степень

  С-

        Z2 = (1,0; 2,0)

  С+

  С

  С вычислить комплексное значение ZI*Z2

        Z3 = OTS$POWCC (%VAL(REAL(Z1)), %VAL(AIMAG(Z1)),

                      %VAL(REAL(Z2)), %VPL(AIMAG(Z2)))

        TYPE *, 'ТНЕ VALUE OF', Z1, '**', Z2,' IS', Z3

        END


       Результат выполнения данной программы:


        ТНЕ VALUE OF (2,000000; 3,000000)** (1,000000;

        2,000000) IS ( -0,4639565; -0,1995301)


        Пример 2.

  С+

  С  Данная программа на языке программирования фортран фор-

  С  мирует результат возведения комплексного основания в

  С  комплексную степень, используя процедуру OTS$POWCGCG_R3

  С



                           - 229 -

                       00152-01 33 09-3


  С  описать Z1, Z2, Z3 как комплексные величины.

  С  OTS$POWCGCG_R3 возвратит комплексный результат Z1**Z2.

  С-

        COMPLEX*16 Z1, Z2, Z3

  С+

  С  сгенерировать комплексное основание

  С-

        Z1 = (2,0; 3,0)

  С+

  С  сгенерировать комплексную степень

  С-

        Z2 (1,0; 2,0)

  С+

  С  вычислить комплексное значение Z1**Z2

        Z3 = Z1**Z2

        TYPE 1, Z1, Z2, Z3

    1   FORMAT(' ТНЕ VALUE OF (',F11.8,';',F11.8,')

    1 **(',F11.8, +';',F11.8,') IS (',F11.8,';',F11.8,').')

        END


       Результат выполнения данной программы:


       ТНЕ VALUE OF (2,00000000; 3,00000000)**(1,00000000;

       2,00000000) IS (-0,46395650; -0,46395650).












                           - 230 -

                       00152-01 33 09-3


       2.22. ОTS$POWC[Z]J - возведение  комплексного

             основания в целую степень


       Данные  процедуры  вычисляют   комплексный   результат

  возведения комплексного основания в целую степень.


       Формат:

       ОTS$POWCJ      основание, степень

       ОTS$POWCDJ_R3  основание, степень

       ОTS$POWCGJ_R3  основание, степень

       Код возврата:

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Комплексный    результат    возведения    комплексного

  основания в целую степень. Процедура  OTS$POWCJ  возвращает

  комплексное число с плавающей запятой формата F;  процедура

  OTS$POWCDJ_R3 - комплексное число с плавающей запятой  фор-

  мата D; процедура OTS$POWCGJ_R3 - комплексное число с  пла-

  вающей запятой формата G.


       Аргументы:


       Основание

       Использование в МОС ВП: комплексное число

       Тип: комплексное число с плавающей запятой формата F,

            комплексное число с плавающей запятой формата D,

            комплексное число с плавающей запятой формата G




                           - 231 -

                       00152-01 33 09-3


       Доступ: только чтение

       Механизм: посредством значения

       Комплексное основание. Для процедуры OTS$POWCJ  значе-

  ние  аргумента  основание  является  комплексным  числом  с

  плавающей запятой формата F; для процедуры OTS$POWCDJ_R3  -

  комплексным числом с плавающей запятой формата D; для  про-

  цедуры OTS$POWCGJ_R3 - комплексным числом с плавающей запя-

  той формата G.


       Степень

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Степень.  Аргумент  степень  является  целым   длинным

  словом со знаком.


       Описание.

       Процедуры  OTS$POWCJ,  OTS$POWCDJ_R3  и  OTS$POWCGJ_R3

  возвращают комплексный  результат  возведения  комплексного

  основания в целую степень (табл.31).

                                                   Таблица 31

  -----------------------------------------------------------

  Основание    ! Степень  ! Результат

  -----------------------------------------------------------

  Любое        ! > 0      ! (OCHOBAHиE*2**I),        (93)

               !          ! где I-любой ненулевой бит степени

  (0,0;0,0.)   ! <= 0     ! неопределено




                           - 232 -

                       00152-01 33 09-3


                                         Продолжение табл. 31

  -----------------------------------------------------------

  Основание    ! Степень  ! Результат

  -----------------------------------------------------------

  <> (0,0;0,0) ! > 0      ! Формула (85)

  <>(0,0;0,0)  !    0     ! (1,0;0,0)



       Сигнализируемые значения состояния:

  SS$_FLTDIV

       - деление на нуль;

  SS$_FLTOVF

       - переполнения сверху чисел с плавающей запятой;

  MTH$UNDEXP

       - неопределено.


       Пример.


  С+

  С данная программа на языке программирования Фортран форми-

  С рует комплексный результат возведения комплексного осно-

  С вания в целую степень, используя процедуру OTS$POWCJ

  С
   
  С описать Z1, Z3 и OTS$ROWCJ как комплексные величины.

  С тогда OTS$ROWCJ возвратит комплексный результат Z1**Z2.

  С-

        COMPLEX Z1, Z3, OTS$POWSJ

        INTEGER Z2

  С+




                           - 233 -

                       00152-01 33 09-3


  С сгенерировать комплексное основание

  С-

        Z1 = (2,0;3,0)

  С+

  С сгенерировать целую степень.

  С-

        Z2 = 2

  С+

  С вычислить комплексное значение ZI**Z2.

  С-

        Z3 = OTS$POWCJ ( %VAL(REAL(Z1)), % VAL(AIMAG(Z1)),

              %VAL(Z2))

        TYPE 1, Z1, Z2, Z3

     1  FORMAT('THE VALUE OF ('.F10.8.';'.F11.8.')**',I1,'

        IS (',F11.8. + ';'.F12.8.').')



  END

       Результат выполнения данной программы:


        ТНЕ VALUE OF (2,00000000; 3,00000000)**2 IS

        (- 5,000000000; 12,00000000).



       2.23. ОTS$POWD[Z]  -  возведение  в   степень

             основания с плавающей запятой формата D


       Процедуры OTS$POWDD, OTS$POWDJ  и  OTS$POWDR  возводят

  основание с плавающей запятой формата D в степень, выражен-

  ную числом с плавающей запятой формата D,  длинным  словом,




                           - 234 -

                       00152-01 33 09-3


  числом с плавающей запятой формата F.


       Формат:

       ОTS$POWDD основание, степень

       ОTS$POWDJ основание, степень

       ОTS$POWDR основание, степень


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата D

       Доступ: только запись

       Механизм: посредством значения

       Результат возведения в  степень.  Независимо  от  типа

  степени, результат всегда является числом с плавающей запя-

  той формата D.


       Аргументы:


       Основание

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата D

       Доступ: только чтение

       Механизм: посредством значения

       Основание.  Аргумент  основание  является   числом   с

  плавающей запятой формата D.


       Степень

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата D,

            целое длинное слово (со знаком),



                           - 235 -

                       00152-01 33 09-3


            число с плавающей запятой формата F

       Доступ: только чтение

       Механизм: посредством значения

       Степень.  Для  процедуры  OTS$POWDD  аргумент  степень

  является числом с плавающей запятой формата D; для процеду-

  ры OTS$POWDJ - целым длинным словом со знаком; для процеду-

  ры OTS$ROWDR - числом с плавающей запятой формата F.


       Описание.

       Процедуры OTS$POWDD, OTS$POWDJ  и  OTS$POWDR  возводят

  основание с плавающей запятой формата D в степень с плаваю-

  щей запятой формата D, в длиннословную степень или  в  сте-

  пень с плавающей запятой формата F.

       Данные  процедуры  используют   одинаковый   алгоритм.

  Внутренние вычисления производятся с той же точностью,  что

  и точность основания.

       Результат возведения в  степень  с  плавающей  запятой

  формата D приведен в табл.32.

                                                  Таблица 32

  ----------------------------------------------------------

  Основание !   Степень   ! Результат

  ----------------------------------------------------------

  = 0       ! > 0         ! 0,0

  = 0       ! = 0         ! Неопределено

  = 0       ! < 0         ! Неопределено

  < 0       ! Любая       ! Неопределено

  > 0       ! > 0 или < 0 ! 2*[CTEпEHь*DLOG2(OCHOBAHиE)](94)




                           - 236 -

                       00152-01 33 09-3


                                        Продолжение табл. 32

  ----------------------------------------------------------

  Основание !   Степень   ! Результат

  ----------------------------------------------------------

  > 0       ! = 0         ! 1,0


       Результат возведения в степень в виде целого  длинного

  слова приведен в табл.33.

                                                  Таблица 33

   ---------------------------------------------------------

   Основание ! Степень  ! Результат

   ---------------------------------------------------------

    Любое    !  > 0     ! OCHOBAHиE*2**I,               (95)

             !          ! где I-любой ненулевой бит в /сте-

             !          ! пень/

   > 0       !  = 0     ! 1,0

   = 0       !  = 0     ! неопределено

   < 0       !  = 0     ! 1,0

   > 0       !  < 0     ! 1,0/формула (85),             (96)

   = 0       !  < 0     ! неопределено


       Процедура OTS$POWDR преобразует  степень  с  плавающей

  запятой формата F в число с плавающей  запятой  формата  D.

  Затем вычисляется результат с плавающей запятой формата D.


       Возвращаемые значения состояния:

  SS$FLTOVF

       - арифметическое системное прерывание;





                           - 237 -

                       00152-01 33 09-3


  MTH$FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  MTH$FLOUNDMAT

       - переполнение снизу чисел с плавающей запятой;

  MTH$_UNDEXP

       - неопределено.



       2.24. ОTS$POWGX  -   возведение   в   степень

             основания с плавающей запятой формата G


       Процедуры OTS$POWGG и OTS$POWGJ возводят  основание  с

  плавающей запятой формата G в степень с  плавающей  запятой

  формата G или в целую степень, размером в длинное слово.


       Формат:

       ОTS$POWGG    основание, степень

       ОTS$POWGJ    основание, степень


       Код возврата:

        использование в МОС ВП: число с плавающей запятой

        тип: число с плавающей запятой формата G

        доступ: только запись

        механизм: посредством значения

       Результат возведения в  степень.  Независимо  от  типа

  степени, результат всегда является числом с плавающей запя-

  той формата G









                           - 238 -

                       00152-01 33 09-3


       Аргументы:


       Основание

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата G

       Доступ: только чтение

       Механизм: посредством значения

       Основание. Аргумент основание является числом  с  пла-

  вающей запятой формата G


       Степень

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата G,

            целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Степень.  Для  процедуры  OTS$POWGG  аргумент  степень

  является числом с плавающей запятой формата G; для процеду-

  ры OTS$POWGJ - целым длинным словом со знаком.


       Описание.

       Данные  процедуры  используют   одинаковый   алгоритм.

  Внутренние вычисления производятся с той же точностью,  что

  и точность основания.

       Результат возведения в степень числа с плавающей запя-

  той формата G приведен в табл.34.









                           - 239 -

                       00152-01 33 09-3


                                                  Таблица 34

  ----------------------------------------------------------

  Основание ! Степень ! Результат

  ----------------------------------------------------------

  = 0       !  > 0    ! 0,0

  = 0       !  = 0    ! неопределено

  = 0       !  < 0    ! неопределено

  < 0       ! любая   ! неопределено

  > 0       ! > 0, < 0! 2*[CTEпEHь*GLOG2(OCHOBAHиE)]   (97)

  > 0       !  = 0    ! 1,0



       Результат  возведения  в  целую  степень  приведен   в

  табл.35.

                                                  Таблица 35

  ----------------------------------------------------------

  Основание ! Степень   ! Результат

  ----------------------------------------------------------

  Любое     !   > 0     ! Формула (95)

  > 0       !   = 0     ! 1,0

  = 0       !   = 0     ! неопределено

  < 0       !   = 0     ! 1,0

  > 0       !   < 0     ! формула (96)

  = 0       !   < 0     ! неопределено


       Возвращаемые значения состояния:

  SS$_FLTOVF

       - арифметическое системное прерывание;





                           - 240 -

                       00152-01 33 09-3


  MTH$FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  MTH$_FLOUNDMAT

       - переполнение снизу чисел с плавающей запятой;

  MTH$UNDEXP

       - неопределено.


       Пример.


  С+

  С данная программа демонстрирует использование процедуры

  С OTS$POWGG, которая возводит основание с плавающей запятой

  С формата G в степень с плавающей запятой формата G.

  С-

          REAL*8 X,Y, RESULT, OTS$POWGG

  С+

  С аргументы OTS$POWGG передаются посредством значения.

  С т.к. INTEGER и REAL*4 значения имеют длину в одно длин-

  С ное слово, а REAL*8 значения длиной в два длинных слова,

  С уравнять основание (и степень) до двух имеющих измере-

  С ние INTEGER векторов.

  С-

          INTEGER N(2), М(2)

          EQUIVALENCE (N(1), Х,), (M(1),Y)

          Х = 8,0

          Y = 2,0

  С+

  С передать х посредством значения, передать N (I) и N(2)




                           - 241 -

                       00152-01 33 09-3


  С посредством значения. Таким же образом  для Y.

  С-

        RESULT = OTS$POWGG (%VAL(N(1)), %VAL(N(2)),

        %VAL (М(1)), %VAL (М(2)))

        TYPE *,' 8,0**2,0 IS',RESULT

        Х = 9,0

        Y = -0,5

  С+

  С процедура OTS$POWGG вызывается косвенно

  С-

        RESULT = X**Y

        TYPE *,' 9,0**-0,5 IS',RESULT

        END


       Результат выполнения данной программы:


        8,0**2,0 IS 64,0000000000000

        9,0**0,5 IS 0,333333333333333



       2.25. ОTS$POWH[Z]  -  возведение  в   степень

             основания с плавающей запятой формата Н


       Процедуры   OTS$POWHH_R3   и   OTS$POWHJ_R3   возводят

  основание с плавающей запятой формата н в степень с плаваю-

  щей запятой формата Н или в целую степень размером  длинное

  слово.









                           - 242 -

                       00152-01 33 09-3


       Формат:

       ОTS$POWHH_R3  основание, степень

       ОTS$POWHJ_R3  основание, степень


       Код возврата:

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата Н

       Доступ: только запись

       Механизм: посредством значения

       Результат возведения в  степень.  Независимо  от  типа

  степени, результат всегда является числом с плавающей запя-

  той формата Н.


       Аргументы:


        основание

        использование в МОС ВП: число с плавающей запятой

        тип: число с плавающей запятой формата Н

        доступ: только чтение

        механизм: посредством значения

       Основание. Аргумент основание является числом  с  пла-

  вающей запятой формата Н.


       Степень

       Использование в МОС ВП: длинное слово со знаком

       Тип: число с плавающей запятой формата Н,

            целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения




                           - 243 -

                       00152-01 33 09-3


       Степень. Для процедуры OTS$POWHH_R3 значение аргумента

  степень является числом с плавающей запятой формата Н,  для

  процедуры OTS$POWHJ_R3 - целое длинное слово, со знаком.


       Описание.

       Результат возведения в  степень  с  плавающей  запятой

  формата н показан в табл.36.

                                                  Таблица 36

  ----------------------------------------------------------

  Основание ! Степень   ! Результат

  ----------------------------------------------------------

  = 0       !   > 0     ! 0,0

  = 0       !   = 0     ! неопределено

  = 0       !   < 0     ! неопределено

  < 0       !  любая    ! неопределено

  > 0       !  > 0, < 0 ! 2[CTEпEHь*HLOG2 (основание)]  (98)

  > 0       !   = 0     ! 1,0


       Результат  возведения  в  целую  степень   показан   в

  табл.37.

                                                  Таблица 37

  ----------------------------------------------------------

  Основание ! Степень ! Результат

  ----------------------------------------------------------

  Любое     !  > 0    ! Формула (85)

   > 0      !  = 0    ! 1,0

   = 0      !  = 0    ! неопределено

   < 0      !  = 0    ! 1,0




                           - 244 -

                       00152-01 33 09-3


                                        Продолжение табл. 37

  ----------------------------------------------------------

  Основание ! Степень ! Результат

  ----------------------------------------------------------

   > 0, < 0 !  = 0    ! Формула (96)

   = 0      !  < 0    ! неопределено




       Возвращаемые значения состояния:

  SS$_FLTOVF

       - арифметическое системное прерывание;

  MTH$_FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  MTH$_FLOUNDMAT

       - переполнение снизу чисел с плавающей запятой;

  MTH$_UNDEXP

       - неопределено.


       Пример.


  С+

  С  пример процедуры OTS$POWHH, которая возводит основание с

  С  плавающей запятой формата н в степень с плавающей запя-

  С  той формата Н.

  С-

        REAL*16 X,Y,RESULT

        Х = 9877356535,0

        Y = -0,5837653

  С+



                           - 245 -

                       00152-01 33 09-3


  С  процедура OTS$POWHH вызывается косвенно.

  С-

        RESULT = X**Y

        TYPE *,'9877356535,0**-0,5837653 IS ',RESULT

        END

       Данная программа  на  языке  программирования  фортран

  демонстрирует, как вызывать процедуру OTS$POWHH.  Результат

  выполнения данной программы:


    8,0**2,0 IS 1,463779145994628357482343598205427е-0006



       2.26. ОTS$POWII - возведение целого основания

             в целую степень


       Данная процедура возводит основание размером в слово в

  степень, размером в слово.


       Формат:

       ОTS$POWII основание, степень


       Код возврата:

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только запись

       Механизм: посредством значения

       Результат возведения основания в степень.


       Аргументы:


       Основание




                           - 246 -

                       00152-01 33 09-3


       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Основание. Аргумент основание является целым словом со

  знаком.


       Степень

       Использование в МОС ВП: слово со знаком

       Тип: целое слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Степень. Аргумент степень  является  целым  словом  со

  знаком.


       Возвращаемые значения состояния:

  SS$FLTDIV

       - арифметическое системное прерывание;

  SS$_FLTOVF

       - арифметическое системное прерывание;

  MTH$_UNDEXP

       - неопределено. Данная  ошибка  сигнализируется,  если

         основание и степень меньше или равны 0.














                           - 247 -

                       00152-01 33 09-3


       2.27. ОTS$POWJJ  -   возведение   в   степень

             основания размером в длинное слово


       Данная процедура возводит основание (длинное слово)  в

  степень (длинное слово).


       Формат:

       ОTS$POWJJ основание, степень


       Код возврата:

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только запись

       Механизм: посредством значения

       Результат  возведения  основания  размеров  в  длинное

  слово в степень размером в длинное слово.


       Аргументы:


       Основание

       Использование в МОС ВП: длинное слово со знаком

       Тип: целое длинное слово (со знаком)

       Доступ: только чтение

       Механизм: посредством значения

       Основание. Аргумент основание является  целым  длинным

  словом со знаком.


        Степень

        использование в МОС ВП: длинное слово со знаком

        тип: целое длинное слово (со знаком)




                           - 248 -

                       00152-01 33 09-3


        доступ: только чтение

        механизм: посредством значения

       Степень.  Аргумент  степень  является  целым   длинным

  словом со знаком.


       Сигнализируемые значения состояния:

  SS$_FLTDIV

       - арифметическое системное прерывание;

  SS$_FLTOVF

       - арифметическое системное прерывание;

  MTH$_UNDEXP

       - неопределено. Ошибка сигнализируется, если основание

         и степень меньше или равно 0.



       2.28. ОTS$POWR[Z]  -  возведение  в   степень

             основания с плавающей запятой формата F


       Процедуры  OTS$POWRD,  OTS$POWRJ,  OTS$POWRR  возводят

  основание с плавающей запятой формата F в степень с плаваю-

  щей запятой формата D, степень размером в длинное слово или

  в степень с плавающей запятой формата F.


       Формат:

       ОTS$POWRD  основание, степень

       ОTS$POWRJ  основание, степень

       ОTS$POWRR  основание, степень









                           - 249 -

                       00152-01 33 09-3


       Код возврата:

       Использование в МОС ВП:число с плавающей запятой

       Тип: число с плавающей запятой формата F

       Доступ: только запись

       Механизм: посредством значения

       Процедура OTS$POWRJ возвращает число с плавающей запя-

  той формата F; процедура OTS$POWRR возвращает число с  пла-

  вающей запятой формата F;  процедура  OTS$POWRD  возвращает

  число с плавающей запятой формата D.


       Аргументы:


       Основание

       Использование в МОС ВП: число с плавающей запятой

       Тип: число с плавающей запятой формата F

       Доступ: только чтение

       Механизм: посредством значения

       Основание. Аргумент основание является числом  с  пла-

  вающей запятой формата F.


       Степень

       Использование в МОС ВП: переменная

       Тип: число с плавающей запятой формата D,

            целое длинное слово (со знаком),

            число с плавающей запятой формата F

       Доступ: только чтение

       Механизм: посредством значения

       Степень. Для процедуры OTS$POWRD  значением  аргумента

  степень является число с плавающей запятой формата  D;  для



                           - 250 -

                       00152-01 33 09-3


  процедуры OTS$POWRJ - целое длинное слово  со  знаком;  для

  процедуры OTS$POWRR - число с плавающей запятой формата F.


       Описание.

       Результат возведения в  степень  с  плавающей  запятой

  формата F приведен в табл.38.

                                                  Таблица 38

  ----------------------------------------------------------

  Основание ! Степень   ! Результат

  ----------------------------------------------------------

  = 0       !  > 0      ! 0,0

  = 0       !  = 0      ! Неопределено

  = 0       !  < 0      ! Неопределено

  < 0       !  Любая    ! Неопределено

  > 0       !  > 0, < 0 ! 2*[CTEПEHЬ*LOG2 (основание)]  (99)

  > 0       ! = 0       ! 1,0


       Результат  возведения  в  целую  степень  приведен   в

  табл.39.

                                                  Таблица 39

   ---------------------------------------------------------

    Основание  !  Степень  ! Результат

   ---------------------------------------------------------

   Любое       ! > 0       ! Формула (95)

   > 0         ! = 0       ! 1,0

   = 0         ! = 0       ! Неопределено

   < 0         ! = 0       ! 1,0

   > 0         ! < 0       ! Формула (86)




                           - 251 -

                       00152-01 33 09-3


                                        Продолжение табл. 39

   ---------------------------------------------------------

    Основание  !  Степень  ! Результат

   ---------------------------------------------------------

   = 0         ! < 0       ! неопределено


       Процедура OTS$POWRD преобразует основание с  плавающей

  запятой формата D. Затем, OTS$POWRD вычисляет  результат  с

  плавающей запятой формата F тем же образом, что и процедура

  OTS$POWRD.


       Возвращаемые значения состояния:

  SS_FLTOVF

       - арифметическое системное прерывание;

  MTH_FLOOVEMAT

       - переполнение сверху чисел с плавающей запятой;

  MTH$FLOUNDMAT

       - переполнение снизу чисел с плавающей запятой;

  MTH$_UNDEXP

       - неопределено. Ошибка сигнализируется, если основание

         и степень меньше или равно 0.


       Пример 1.


  C+

  C  данная программа на языке программирования фортран

  использует процедуру OTS$POWRR.

  C-

       REAL*4 X,Y RESULT, OTS$POWRR




                           - 252 -

                       00152-01 33 09-3


       Х = 8,0

       Y = 2,0

  C+

  C  аргументы OTS$POWRR передаются посредством значения.

  С-

       RESULT = OTS$POWRR (%VAL(X),%VAL(Y))

       ТYPE *,' 8,0**2,0 IS '<,RESULT

       Х = 9,0

       Y = -0,5

  C+

  C  процедура  OTS$POWRR вызывается косвенно.

  С-

       RESULT = X**Y

       ТYPE *,' 9,0**-0,5 IS ',RESULT

       ЕND


       Результат выполнения данной программы:


       8,0**2,0 IS 64,00000

       9,0**-0,5 IS 0,3333333

       Пример 2


  C+

  C  данная программа на языке программирования фортран

  C  использует процедуру OTSPOWRD.

        REAL*4 X

        REAL*8 Y,RESULT,OTS$POWRD

        INTEGER M(2)

        EQUIVALENCE (M(1),Y)



                           - 253 -

                       00152-01 33 09-3


        X = 9768,0

        Y = 9,0

  C+

  C  аргументы OTS$POWRD передаются посредством значения.

  С-

        REZULT = OTS$POWRD (%VAL(X),%VAL(M(1)), %VAL(M(2)))

        TYPE*,' 9768,0**9,0 IS ',RESULT

        X = 7689,0

        Y = -0,587436654545

  C+

  C  процедура OTS$POWRD вызывается косвенно.

  C-

        RESULT = X**Y

        TYPE *,' 7689,0**-0,587436654545 IS ', RESULT

        END

       Результат выполнения данной программы:


        9768,0**9,0 IS 8,0956338648832908е+35

        73689,0**-0,587436654545 IS 5,2155199252836588е-03



       2.29. ОTS$SCOPY_DXDX  -  копирование  строки,

             указанной дескриптором


       Данная процедура копирует  исходную  строку  в  строку

  назначения. Обе строки указываются посредством дескриптора.


       Формат:

        OTS$COPY_DXDX  источник, приемник





                           - 254 -

                       00152-01 33 09-3


       Точка входа JSB:

       ОTS$SCOPY_DXDX6


       Код возврата:

       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только запись

       Механизм: посредством значения

       Если исходная строка  содержит  больше  символов,  чем

  строка назначения и используется точка входа  JSB,  регистр

  R0 содержит число символов, которые не переписаны.


       Аргументы:


       Источник

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством дескриптора

       Исходная строка. Аргумент  источник  является  адресом

  дескриптора. Класс дескриптора может  быть  неопределенным,

  фиксированной  длины,  динамическим,  десятичным  массивом,

  несмежным массивом или переменным.


       Приемник

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредством дескриптора




                           - 255 -

                       00152-01 33 09-3


       Строка назначенния. Аргумент приемник является адресом

  дескриптора.


       Описание.

       Процедура OTS$SCOPY_DXDX копирует  исходную  строку  в

  назначенную строку. Все ошибочные состояния кроме  усечения

  сигнализируются; усечение игнорируется.

       Содержание регистров следующее:

       - R0 = число байт исходной строки, не перемещенных в

              назначенную строку;

       - R1 = адрес первого не перемещенного байта исходной

              строки;

       - R2 = 0;

       - R3 = адрес первого байта за пределами назначенной

              строки;

       - R4 = 0;

       - R5 = 0.

       Производимые  действия,  в   зависимости   от   класса

  назначенной строки описанны в табл.40.

                                                  Таблица 40

  ----------------------------------------------------------

  Поле класса     ! Действие

  ----------------------------------------------------------

  DSC$K_CLASS_    ! Копировать исходную строку. Если

  S, Z, SD, A,NCA ! необходимо, дополнить или усечь справа.

  DSC$K_CLASS_D   ! если область, указанная дескриптором

                  ! назначенной строки достаточно большая,




                           - 256 -

                       00152-01 33 09-3


                                        Продолжение табл. 40

  ----------------------------------------------------------

  Поле класса     ! Действие

  ----------------------------------------------------------

                  ! чтобы вместить исходную строку,

                  ! копировать исходную строку и установить

                  ! новую длину в дескрипторе назначенной

                  ! строки. Если указанная область недоста-

                  ! точна, возвратиться к предыдущему рас-

                  ! пределению пространства (любому) и ди-

                  ! намически распределить необходимое

                  ! пространство. Копировать исходную стро-

                  ! ку и установить новую длину и адрес в

                  ! дескрипторе назначенной строки

  DSC$K_CLASS_VS  ! Копировать исходную строку в назначенную

                  ! строку до предела DSC$W_MAXSTRLEN без

                  ! заполнения. Приспособить поле текущей

                  ! длины к действительному числу копируемых

                  ! байт


       Сигнализируемые значения состояния:

  OTS$_FATINTERR

       - неустранимая внутренняя ошибка;

  OTS$_INVSTRDES

       - неверный дескриптор строки;

  OTS$_INSVIRMEN

       - недостаточной виртуальной памяти.





                           - 257 -

                       00152-01 33 09-3


       2.30. ОTS$SCOPY_R_DX  -  копирование  строки,

             указанной посредством ссылки


       Данная процедура копирует исходную  строку,  указанную

  посредством ссылки, в назначенную строку.


       Формат:

        OTS$SCOPY_R_DX  длина, адрес, приемник


       Точка входа JSB:

       ОTS$SCOPY_R_DX6


       Код возврата:

       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только запись

       Механизм: посредством значения

       Если исходная строка содержит больше символов чем наз-

  наченная  и  используется  точка  входа  JSB,  регистр   R0

  содержит  число  символов,  не  переписанных  из   исходной

  строки.


       Аргументы:


       Длина

       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Длина исходной строки. Аргумент длина  является  целым




                           - 258 -

                       00152-01 33 09-3


  словом без знака.


       Адрес

       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только чтение

       Механизм: посредством ссылки

       Исходная  строка.  Аргумент  адрес  является   адресом

  исходной строки.


       Приемник


       Использование в МОС ВП: символьная строка

       Тип: символьная строка

       Доступ: только запись

       Механизм: посредстсвом дескриптора

       Назначенная строка. Аргумент приемник является адресом

  дескриптора, указывающего назначенную строку.  Поле  класса

  определяет    соответствующее    действие.    Поле    длины

  (DSC$W_LENGTH) или поля длины и адреса (DSC$A_POITER) могут

  изменяться, если строка динамическая. Для изменяемых строк,

  текущая длина переписывается.


       Описание.

       Процедура OTS$SCOPY_R_DX копирует  исходную  строку  в

  назначенную.     Все     состояния,     кроме     усечения,

  сигнализируются; усечение игнорируется.

       При  использовании   точки   входа   CALL   содержимое

  регистров R0 (возвращаемое значение  состояния)  такое  же,




                           - 259 -

                       00152-01 33 09-3


  как после выполнения инструкции  MOVC5.  При  использовании

  точки входа JSB регистры R0...R5 и PSL будут такими же, как

  после инструкции MOVC5. Содержимое регистров R0...R5:

      -  R0 = число байт исходной строки, не пересылаемых

            в назначенную строку;

       -  R1 = адрес первого байта, следующего за последним

            пересылаемым байтом исходной строки;

       -  R2 = 0;

       -  R3 = адрес первого байта, находящегося за пределами

               назначенной строки;

       -  R4 = 0;

       -  R5 = 0.

       Действия,  производимые  в   зависимости   от   класса

  назначенной строки приведены в табл.41.

                                                  Таблица 41

   ---------------------------------------------------------

     Поле класса   !            Действие

   ---------------------------------------------------------

   DSC$K_CLASS_    ! Копировать исходную строку. Если

   S, Z, SD, А, NCA! необходимо, дополнить или усечь справа,

   DSC$K_CLASS_D   ! если область, определенная посредством

                   ! дескриптора назначенной строки доста-

                   ! точно большая для содержания исходной

                   ! строки, копировать исходную строку и

                   ! установить новую длину в дескрипторе

                   ! назначенной строки. Если определен-

                   ! ная область недостаточна, возвратить-




                           - 260 -

                       00152-01 33 09-3


                                        Продолжение табл. 41

   ---------------------------------------------------------

     Поле класса   !            Действие

   ---------------------------------------------------------

                   ! ся к предыдущему распределению прост-

                   ! ранства (любому) и динамически

                   ! распределить необходимую память. Ко-

                   ! пировать исходную строку и установить

                   ! новую длину и адрес в дескрипторе наз-

                   ! наченной строки

   DSC$K_CLASS_VS  ! Копировать исходную строку в назначен-

                   ! ную до предела DSC$W_MAXSTRLEN без

                   ! заполнения. Приспособить поле текущей

                   ! длины к действительному числу копируе-

                   ! мых байт.


       Сигнализируемые значения состояния:

  OTS$_FATINTERR

       - неустранимая внутренняя ошибка;

  OTS$_INVSTRDES

       - неверный дескриптор строки;

  OTS$_INSVIRMEM

       - недостаточная виртуальная память.



       2.31. ОTS$SFREE1_DD  -   освобождение   одной

             динамической строки


       Данная процедура возвращает одну динамическую строку в




                           - 261 -

                       00152-01 33 09-3


  свободную память.


       Формат:

       ОTS$SFREE1_DD строка


       Точка входа JSB:

       ОTS$SFREE1_DD6


       Код возврата:

       Не существует


       Аргументы:


       Строка

       Использование в МОС ВП: квадрослово без знака

       Тип: квадрослово (без знака)

       Доступ: модификация

       Механизм: посредством ссылки

       Дескриптор  динамической   строки.   Аргумент   строка

  является  адресом  дескриптора  динамической  строки.  Поле

  класса дескриптора не проверяется.


       Описание.

       Процедура    OTS$SFREE1_DD    освобождает    описанное

  строковое пространство и соответственно устанавливает  поля

  дескриптора (DSC$A_POINTER=0 и DSC$W_LENGTH=0).


       Сигнализируемые значения состояния:

  OTS$_FATINTERR

       - неустранимая внутренняя ошибка.





                           - 262 -

                       00152-01 33 09-3


       2.32. ОTS$SFREEN_DD    -    освобождение    N

             динамических строк


       Данная процедура возвращает  N  динамических  строк  в

  свободную память.


       Формат:

       ОTS$SFREEN_DD длина, дескриптор


       Точка входа JSB:

       ОTS$SFREEN_DD6


       Код возврата:

       Не существует


       Аргументы:

       Длина

       Использование в МОС ВП: длинное слово без знака

       Тип: длинное слово ( без знака )

       Доступ: только чтение

       Механизм: посредством значения

       Количество смежных  дескрипторов  динамических  строк,

  возвращаемых в свободную память.  Аргумент  длина  является

  длинным словом без знака, содержащим данное число.


       Дескриптор

       Использование в МОС ВП: квадрослово без знака

       Тип: квадрослово (без знака)

       Доступ: модификация

       Механизм: посредством ссылки




                           - 263 -

                       00152-01 33 09-3


       Дескриптор первой динамической освобожденной  области.

  Аргумент дескриптор  является  адресом  дескриптора  первой

  динамической   строки.   Поля   класса    дескриптора    не

  проверяются.


       Описание.

       Процедура   OTS$SFREEN_DD6    освобождает    описанное

  строковое  пространство  и   помечает   каждый   дескриптор

  (DSC$A_POINTER=0 и DSC$W_LENGTH=0).


       Сигнализируемое значение состояния:

  OTS$FATINTERR

       - неустранимая внутренняя ошибка.



       2.33. ОTS$SGET1_DD  -   распределение   одной

             динамической строки


       Данная процедура распределяет определенное число  байт

  динамической виртуальной памяти, определенной  дескриптором

  динамической строки.


       Формат:

       ОTS$SGET1_DD  длина, дескриптор


       Точка входа JSB:

       ОTS$SGET1_DD_R6


       Код возврата:

       Не существует






                           - 264 -

                       00152-01 33 09-3


       Аргументы:


       Длина

       Использование в МОС ВП: слово без знака

       Тип: слово (без знака)

       Доступ: только чтение

       Механизм: посредством значения

       Число распределяемых  байт.  Аргумент  длина  содержит
  
  число байт. Количество распределяемой памяти  автоматически

  округляется.


       Дескриптор

       Использование в МОС ВП: квадрослово без знака

       Тип: квадрослово (без знака)

       Доступ: модификация

       Механизм: посредством ссылки

       Дескриптор    динамической    строки,    в     которой

  распределяется  область.   Аргумент   дескриптор   является

  адресом дескриптора динамической строки. Поле класса  деск-

  риптора  не  проверяется,   но   код   класса   дескриптора

  установлен как динамический (DSC$B_CLASS=2).


       Описание.

       Процедура OTS$SGET1_DD распределяет определенное число

  байт  динамической  виртуальной   памяти   в   определенном

  дескрипторе динамической строки. Данная  процедура  подобна

  процедуре OTS$SCOPY_DXDX,  за  исключением  того,  что  нет

  исходной копируемой строки.





                           - 265 -

                       00152-01 33 09-3


       Если  определенный   дескриптор   строки   уже   имеет

  распределенную    динамическую     память,     пространство

  освобождается  перед  тем,   как   процедура   OTS$SGET1_DD

  распределит новое пространство.


       Сигнализируемые значения состояния:

  OTS$_FATINTERR

       - неустранимая внутренняя ошибка;

  OTS$_INSVIRMEN

       - недостаточно виртуальной памяти.


       Пример.

       РROGRAM STRING_TEST

  C+

  C  данная программа демонстрирует обращения нескольких

  C  процедур к динамической строке.

  C  описание

  C-

     IMPLICIT NONE

     CHARACTER*80  DATA_LINE

     INTEGER*4   DATA_LEN, DSC(2), CRLF_DSC (2), TEMP_DSC(2)

     CHARACTER*2   CRLF

  C+

  C  инициализировать выходной дескриптор. Он должен быть

  C  пустой.

  С-

        CALL OTS$SGET1_DD (%VAL(0), DSC)

  C+




                           - 266 -

                       00152-01 33 09-3


  C  инициализировать дескриптор для строки CRLF и пере-

  C  писать в него символ CRLF.

  С-

   CALL OTS$SGET1_DD (%VAL(2), CRLF_DSC)

   CRLF = CHAR (13 )//CHAR (10)

   CALL OTS$SCOPY_R_DX ( %VAL(2), %REF(CRLF(1:1)), CRLF_DSC)



  C+

  C  инициализировать временный дескриптор.

  С-

        CALL OTS$SGET1_DD (%VAL(0), TEMP_DSC)

  C+

  C  подсказка пользователю.

  C-

        WRITE (6,999)

  999   FORMAT(1X, 'ENTER YOUR MESSAGE, END WITH CTRL/Z.')

  C+

  C  читать строки текста с терминала до конца файла.

  C  связать каждую строку с предыдущим вводом. Включать

  C  CRLF между строками.

  С-

        DO WHILE (.TRUE.)

           READ (5,998, ERR = 10) DATA_LEN, DATA_LINE

           FORMAT (Q,A)

           CALL OTS$SCOPY_R_DX (%VAL(DATA_LEN),

     1        %REF (DATA_LINE (1:1)),

     2        TEMP_DSC)




                           - 267 -

                       00152-01 33 09-3


           CALL STR$CONCAT ( DSC, DSC, TEMP_DSC, CRLF_DSC )

        END DO

  C+

  C  пользователь напечатал CTRL/Z. Вывести прочитанное.

  C-

  10    CALL LIB$PUT_OUTPUT (DSC)

  C+

  C  освободить распределенную память для динамической

  C  строки.

  С-

        CALL OTS$SFREE1_DD (DSC)

        CALL OTS$SFREE1_DD (CRLF_DSC )

        CALL OTS$SFREE1_DD ( TEMP_DSC )

  C+

  C  закончить программу.

  С-

        STOP

        END









           











                           - 268K -

                       00152-01 33 09-3


   ------------------------------------------------------------
   I                                                          I
   I                  Лист регистрации изменений              I
   I                                                          I
   I----------------------------------------------------------I
   IНомера листов (страниц)IВсего IN     IВходящий IПодп.IДатаI
   I-----------------------IлистовIдоку- IN сопро- I     I    I
   IИ IИз- IЗа- IНо- IАнну-I(стра-Iмента Iводитель-I     I    I
   Iз Iме- Iме- Iвых Iлиро-Iниц)  I      Iного до- I     I    I
   Iм Iнен-Iнен-I    Iван- Iв до- I      Iкум. и   I     I    I
   I. Iных Iных I    Iных  Iкум.  I      Iдата     I     I    I
   I----------------------------------------------------------I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
   I  I    I    I    I     I      I      I         I     I    I
  
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!