我的stattic llib有一些不稳定的数值结果:所以我刚开始寻找原因:在NDK c ++端用android_log发现了一些非常奇怪的输出数据。
这是我的代码部分,其中是log:
数据输入矩阵
SpectralClustering::SpectralClustering(Eigen::MatrixXd& data, int numDims)
: mNumDims(numDims), mNumClusters(0)
{
Eigen::MatrixXd Deg;
for ( int ijk2 = 0; ijk2 <data.rows(); ++ijk2) {
double fde=data(ijk2,0);
LOGD( "This is a number from JNI: %d", fde );
}
Eigen::EigenSolver<Eigen::MatrixXd> es(data,true);
}
数据的数字介于-1; 1之间(我检查它确定)但是当我传递并使用此类创建对象时:
SpectralClustering* cls = new SpectralClustering(DATA, spec_vec4);
输出数据非常奇怪,它的内容大约是16058451212 .....
我想这个问题会出现在某个地方和内存中,但是当我删除它的时候也是如此。
答案 0 :(得分:1)
您可以将double
打印为int
,因此您的代码中包含undefined behavior。
您可能希望使用正确的浮点格式"%f"
。参见例如this printf
reference