Вы хотите void multiplication(float *a, float *b, float *x, int n);
.Обратите внимание, что обычно вы должны использовать size_t
для индексов и размеров массивов и double
в качестве предпочитаемого типа с плавающей запятой, если у вас нет особых причин использовать float
.
Каждый из a
, b
и x
указывают на смежные значения с плавающей точкой, вы можете захотеть разыменовать их, используя a[n * x + y]
.
C99 предоставляет множество интересных возможностей оптимизации, которые вы в значительной степени не можетеполагаться на любой известный мне компилятор:
С этим должно быть возможно что-то подобное:
void multiplication(size_t len; // <- semicolon not a mistake
double a[len][restrict const len],
double b[len][restrict const len],
double c[len][restrict const len]);
Эта педантичная конструкция будет указывать компилятору, что длина массивов одинакова, они 2D, а размеры указаны из кода вызова во время выполнения.Кроме того, все массивы кэшируются, поскольку они не псевдоним друг друга.
Можно только мечтать, что C продолжает развиваться, C99 все еще не полностью поддерживается, и многие другие улучшения не стали мейнстримом.