Текст подпрограммы и версий av16r_c.zip av16d_c.zip av16c_c.zip |
Тексты тестовых примеров tav16r_c.zip tav16d_c.zip tav16c_c.zip |
Вычисление суммы модулей компонент вектора.
Функция 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