Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 矩阵中的第三小数及其加法_C - Fatal编程技术网

C 矩阵中的第三小数及其加法

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;

如果您试图访问SIMD指令,我认为没有一种方法可以同时访问这两种指令。如果您不打算使用SIMD,则只需保留一个包含三个最小值的临时数组,如优先级队列,该队列在每次计算矩阵中的和时都会更新

如果是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吗?谢谢