此代码应生成相同的输出。但是 c 输出似乎被四舍五入,而 c++ 不是。我不明白这里发生了什么。请解释。
在我展示代码之前,相同的值被传递给 c 和 c++ 代码。
c代码:
unsigned int sz1=sz+1;
double* bMat = (double*)calloc(bMatSize,bMatSize * sizeof(double));
for (unsigned int ii = 0; ii<sz; ii++)
for (unsigned int jj = 0; jj <= ii; jj++)
{
bMat[jj*sz1 + ii] = simgms_math_ddot(numBFunc, queueTest[ii], queueTest[jj] );
bMat[ii*sz1 + jj] = bMat[jj*sz1 + ii];
}
C++代码:
std::vector<double> bMat;
unsigned int sz1=sz+1;
bMat.resize(sz1*sz1);
for(unsigned int ii=0; ii<sz; ii++)
for(unsigned int jj=0; jj<=ii; jj++)
{
bMat.at(jj*sz1+ii)=simgms_math_ddot(numBFunc, queueTest.at(ii).data(), queueTest.at(jj).data());
bMat.at(ii*sz1+jj)=bMat.at(jj*sz1+ii);
}
for (int i = 0; i < bMat.size(); ++i) {
std::cout << bMat[i] << ' ';
}
std::cout << std::endl;
常用功能
double simgms_math_ddot(unsigned int numElements, double aMat[], double bMat[])
{
const MKL_INT n=numElements;
double res = cblas_ddot(n, aMat, 1, bMat, 1);
return res;
}
c c 输出 (bMat)
0 0 -1 0 0 -1 -1 -1 0
时间:2019-05-10 标签:c++coutput(bMat)
1.05e-05 0.00134 -1 0.00134 1.11 -1 -1 -1 0
并且误差矩阵包含值:
1.78e-15 0.387 1.3 -0.48 -17.5 2.28 -0.387 -1.78e-15 1.48 -0.33 -17.3 2.4 -1.3 -1.48 -1.11e-16 1.08 -0.926 2.41 0.48 0.33 -1.08 0 0.551 0.74 17.5 17.3 0.926 -0.551 0 -0.384 -2.28 -2.4 -2.41 -0.74 0.384 0
std::deque< double* > queueTest;
....它充满了 errorMatrix 元素,它们是 2d 数组,
e.g: queueTest.push_front(errorMatrix);