Как я уже говорил в комментариях, вам нужно начать с самого начала снова. Вот переписанная программа, которая делает эту работу. Функция inner_product()
умеренно велика просто потому, что в ней есть отладочный код печати (закомментированный) и три альтернативных способа выполнения арифметики (два из них тоже закомментированы). Ядро чрезвычайно простое.
#include <stdio.h>
#define N 10
static double inner_product(const double *a, const double *b, int n)
{
double sum = 0;
for (int i = 0; i < n; i++)
{
/*printf("%8.3f * %8.3f = %14.6f ", *a, *b, *a * *b);*/
// Alternative ways of computing the sum
// sum += *(a+i) * *(b+i);
// sum += a[i] * b[i];
sum += *a++ * *b++;
/*printf("CS = %15.6f\n", sum);*/
}
return sum;
}
static void print_vector(const char *tag, const double *v, int n)
{
printf("Vector %s (%d):\n", tag, n);
for (int i = 0; i < n; i++)
printf("%9.3f", v[i]);
putchar('\n');
}
int main(void)
{
// random -n 10 -F '%7.3f' -- -1000 1000 | commalist -B 8 -n 5 -W 8
double a[N] =
{
-78.533, 52.153, -632.825, -196.897, 157.031,
-804.630, -787.420, -281.817, -963.641, 561.922,
};
double b[N] =
{
112.700, -83.580, -294.587, 320.394, -8.366,
218.917, 148.115, 421.533, -691.338, -741.578,
};
print_vector("A", a, N);
print_vector("B", b, N);
double x = inner_product(a, b, N);
printf("The inner product of the vectors is: %lf\n", x);
return 0;
}
Функция печати полезна; Вы можете разработать варианты, которые выводят новую строку каждые пять чисел или любое другое число чисел в строке. Печать данных теста важна; это гарантирует, что программа обрабатывает ожидаемые вами данные.
Вывод (отладка включена):
Vector A (10):
-78.533 52.153 -632.825 -196.897 157.031 -804.630 -787.420 -281.817 -963.641 561.922
Vector B (10):
112.700 -83.580 -294.587 320.394 -8.366 218.917 148.115 421.533 -691.338 -741.578
-78.533 * 112.700 = -8850.669100 CS = -8850.669100
52.153 * -83.580 = -4358.947740 CS = -13209.616840
-632.825 * -294.587 = 186422.018275 CS = 173212.401435
-196.897 * 320.394 = -63084.617418 CS = 110127.784017
157.031 * -8.366 = -1313.721346 CS = 108814.062671
-804.630 * 218.917 = -176147.185710 CS = -67333.123039
-787.420 * 148.115 = -116628.713300 CS = -183961.836339
-281.817 * 421.533 = -118795.165461 CS = -302757.001800
-963.641 * -691.338 = 666201.641658 CS = 363444.639858
561.922 * -741.578 = -416708.992916 CS = -53264.353058
The inner product of the vectors is: -53264.353058
Вывод (отладка отключена):
Vector A (10):
-78.533 52.153 -632.825 -196.897 157.031 -804.630 -787.420 -281.817 -963.641 561.922
Vector B (10):
112.700 -83.580 -294.587 320.394 -8.366 218.917 148.115 421.533 -691.338 -741.578
The inner product of the vectors is: -53264.353058
Я проверил это, написав скрипт для диска bc
, чтобы повторить расчет; он дал тот же ответ (после того, как я отладил скрипт).