C 矩阵中的第三小数及其加法
如果您试图访问SIMD指令,我认为没有一种方法可以同时访问这两种指令。如果您不打算使用SIMD,则只需保留一个包含三个最小值的临时数组,如优先级队列,该队列在每次计算矩阵中的和时都会更新C 矩阵中的第三小数及其加法,c,C,如果您试图访问SIMD指令,我认为没有一种方法可以同时访问这两种指令。如果您不打算使用SIMD,则只需保留一个包含三个最小值的临时数组,如优先级队列,该队列在每次计算矩阵中的和时都会更新 如果是C++,优先级队列可以保存在STL算法使用的函子对象中。 示例代码如下: void addMatrix(unsigned int size, double const * const a, double const * const b, double * const res) { int i;
如果是C++,优先级队列可以保存在STL算法使用的函子对象中。
示例代码如下:
void addMatrix(unsigned int size, double const * const a, double const * const b, double * const res) {
int i;
for (i = 0; i < size * size; ++i)
res[i] = a[i] + b[i];
}
double findThirdSmallest(unsigned int size, double const * const input) {
//save the three smallest values inside res
double res[3];
int i;
for (i = 0; i < 3; ++i) {
res[i] = LDBL_MAX;
}
for (i = 0; i < size * size; ++i) {
int j;
for (j = 0; j < 3; ++j) {
if (input[i] < res[j]) {
int k;
for (k = 2; k != j; --k) {
res[k] = res[k - 1];
}
res[j] = input[i];
break;
}
}
}
return res[2];
}
编辑:更改矩阵的类型和大小将是您的工作。关于保留临时变量的提示:注意,他的情况有点复杂,因为他寻求的是第三小项,而不是最小项1,例如int mat1[50][50],mat2[50][50];2我不知道如何做加法,然后在结果中找到第三个最小的元素并打印出来——某种形式的循环等等@Heigan:当然有可能。你没学矩阵加法吗?如果没有,试着在网上找到它-应该很容易。如果我有int mat1[50][50],mat2[50][50]真的需要使用double和LDBL_MAX吗?谢谢