 const int INT64L = 64;
 const int DOUBLE_MANT = 53;
 
+mpf_class *tmpC1, *tmpC2, *tmpC3, *tmpC4, *tmpC5;
+
 int getSign(const mpf_class a) {
   if((a.get_mpf_t()->_mp_size) < 0) {return -1;}
   else {return 1;}

					 const int nr_rows, const int nr_cols, int &maxExp, 
					 const int ownLimbSize) {
  assert(ownLimbSize <= INT64L);
  timeval t1, t2, tA, tB;
  double etAlloc = 0;
  double etAlgebra = 0;
  double etComputingSizes = 0;
  double etAddingLongs = 0;
  double etAddTrivial = 0;
  double etAccs = 0;
  #pragma omp parallel for schedule(dynamic)
  for(int j = 0; j < nr_cols; ++j) {
    for(int i = 0; i < nr_rows; ++i) {

    }
  }
  
  matrixMultSymm_cuBlas(handle, c, a1, d_aS,  tmpTransferLongToGMP,
			tmp, sizeMatrix, realExpMatrix, signMatrix, d_prodRes, d_res,
			nr_rowsA, nr_colsA, prec);
  for (int i = 0; i < nr_rowsA; ++i) {
    for (int j = 0; j < nr_rowsA; ++j) {
      c[i *  nr_rowsA + j] -= tmpC1[i *  nr_rowsA + j];
      c[i *  nr_rowsA + j] -= tmpC2[i *  nr_rowsA + j];
      c[i *  nr_rowsA + j].get_mpf_t()->_mp_exp -= sizeA2;
      tmpC2[i *  nr_rowsA + j].get_mpf_t()->_mp_exp -= 2 * sizeA2;
      c[i * nr_rowsA + j] += (tmpC1[i * nr_rowsA + j] + tmpC2[i * nr_rowsA + j]);
    }
  }  
}
