Текст подпрограммы и версий
av16r_c.zip  av16d_c.zip  av16c_c.zip 
Тексты тестовых примеров
tav16r_c.zip  tav16d_c.zip  tav16c_c.zip 

Функция:  av16r_c

Назначение

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

Математическое описание

Функция av16r_c вычисляет сумму модулей компонент   n - мерного вектора  x = ( x1, x2, ..., xn ) по формуле:

                          N 
               S   =   ∑   | x i |
                         i =1 

Вектор  x  не обязательно должен занимать последовательные слова памяти машины и может располагаться в памяти с некоторыми постоянными интервалами между компонентами, которые называются параметром приращения. Этот параметр может быть меньше нуля, если обработка компонент вектора должна проводиться в обратном порядке.

В случае, когда параметры приращения равны 1, используется развернутый цикл с шагом 6.

Использование

    real av16r_c (integer *n, real *sx, integer *incx, integer *ierr)

Параметры

n - размерность вектора (тип: целый);
sx - вещественный одномерный массив длины  n, содержащий заданный вектор;
incx - параметр приращения, задающий расположение вектора в массиве sx (тип: целый);
ierr - целая переменная, указывающая характер ошибки; при этом:
ierr=65 - когда n ≤ 0 .

Версии

av16d_c - вычисление суммы модулей компонент вектора, заданного с удвоенной точностью.
av16c_c - вычисление суммы модулей компонент комплексного вектора.

Вызываемые подпрограммы

utav10_c - подпрограмма выдачи диагностических сообщений при работе подпрограмм av16r_c и av16c_c.
utav11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы av16d_c.

Замечания по использованию

 

В функции av16d_c одномерный массив, содержащий вектор, обозначен dx и имеет тип double.

В функции av16c_c одномерный массив, содержащий вектор, обозначен cx и имеет тип complex.

В функции av16c_c сумма модулей компонент вычисляется по формуле:

                       N 
          W   =   ∑   [ | Re ( x i ) |  +  | Im ( x i ) | ]
                     i =1 

Пример использования

int main(void)
{
    /* Initialized data */
    static float sx[11] = { 2.f,0.f,2.f,0.f,2.f,0.f,2.f,0.f,2.f,0.f,2.f };

    /* Local variables */
    extern float av16r_c(int *, float *, int *, int *);
    static int incx, ierr, n;
    static float r16;

    n = 6;
    incx = 2;
    ierr = 0;
    r16 = (float)av16r_c(&n, sx, &incx, &ierr);

    printf("\n  %16.7e \n", r16);
    printf("\n  %5i \n", ierr);
    return 0;
} /* main */


Результаты:     r16  =  12.  ,   ierr  =  0