Текст подпрограммы и версий av11r_c.zip av11d_c.zip av11c_c.zip |
Тексты тестовых примеров tav11r_c.zip tav11d_c.zip tav11c_c.zip |
Вычисление скалярного произведения двух вещественных векторов.
av11r_c вычисляет скалярное произведение двух n - мерных вещественных векторов
(X, Y) = x1 y1 + x2 y2 +...+ xn yn
где X = ( x1, x2, ... , xn ) , Y = ( y1, y2, ... , yn ) .
Векторы X и Y не обязательно должны занимать последовательные слова памяти машины и могут располагаться в памяти с некоторыми постоянными интервалами между компонентами, которые называются параметрами приращения.
Эти параметры могут быть меньше нуля, если обработка компонент вектора должна производиться в обратном порядке.
В случае когда параметры приращения равны 1, используется развернутый цикл с шагом 5.
real av11r_c (integer *n, real *sx, integer *incx, real *sy, integer *incy, integer *ierr)
Параметры
n - | размерность векторов (тип: целый); |
sx, sy - | вещественные одномерные массивы длины n * | incx | и n * | incy | соответственно, содержащие заданные векторы; |
incx - incy | параметры приращения, задающие расположение векторов в массивах sx и sy соответственно (тип: целый); |
ierr - | целая переменная, указывающая характер ошибки, при этом: |
ierr=65 - | когда n ≤ 0; |
ierr=66 - | когда в процессе счета произошло переполнение центрального процессора. |
Версии
av11d_c - | вычисление скалярного произведения вещественных векторов, заданных с удвоенной точностью; |
av11c_c - |
вычисление скалярного произведения комплексных
векторов по формуле: (x, y) = x1 y*1 + x2 y*2 +... + xn y*n где " * " - знак комплексного сопряжения. |
Вызываемые подпрограммы
utav10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм av11r_c и av11c_c. |
utav11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы av11d_c. |
Замечания по использованию
В функции av11d_c одномерные массивы, содержащие заданные векторы, обозначены dx и dy и имеют тип double. В функции av11c_c одномерные массивы, содержащие заданные векторы, обозначены cx и cy и имеют тип complex. |
int main(void) { /* Initialized data */ static float sx[11] = { 1.f,2.f,2.f,2.f,3.f,2.f,4.f,2.f,5.f,2.f,6.f }; static float sy[11] = { 1.f,2.f,2.f,2.f,3.f,2.f,4.f,2.f,5.f,2.f,6.f }; /* Local variables */ extern float av11r_c(int *, float *, int *, float *, int *, int *); static int incx, incy, ierr, n; static float r11; n = 6; incy = 2; incx = 2; r11 = (float)av11r_c(&n, sx, &incx, sy, &incy, &ierr); printf("\n %10.4e \n", r11); printf("\n %5i \n", ierr); return 0; } /* main */ Результаты: r11 = 91.0 , ierr = 0