2
我正在使用Armadillo线性代数库来对角化矩阵。我需要增加最后显示/写入文件的位数。根据Armadillo的reference,“arma :: mat”将创建一个双矩阵。所以,我尝试从“iomanip”使用std :: setprecision,但它并没有工作。下面是抓住了问题的最小码:如何增加使用Armadillo库时显示的位数
#include<iostream>
#include<armadillo>
#include<iomanip>
int main()
{
double Trace_A = 0.;
arma::mat A;
A = :arma::randu<arma::mat>(5,5);
Trace = arma::trace(A);
// Normal output
std::cout << "A = \n" <<A ;
std::cout << "Trace(A) = " << Trace_A << std::endl;
std::cout << "---------------------------------------------" << std::endl;
// Displaying more digits
std::cout << std::fixed << std::setprecision(15);
std::cout << "A = \n" << A;
std::cout << "Trace(A) = " << Trace_A << std::endl;
}
而且,这里是我得到:
A =
0.8402 0.1976 0.4774 0.9162 0.0163
0.3944 0.3352 0.6289 0.6357 0.2429
0.7831 0.7682 0.3648 0.7173 0.1372
0.7984 0.2778 0.5134 0.1416 0.8042
0.9116 0.5540 0.9522 0.6070 0.1567
Trace(A) = 1.83848
---------------------------------------------
A =
0.8402 0.1976 0.4774 0.9162 0.0163
0.3944 0.3352 0.6289 0.6357 0.2429
0.7831 0.7682 0.3648 0.7173 0.1372
0.7984 0.2778 0.5134 0.1416 0.8042
0.9116 0.5540 0.9522 0.6070 0.1567
Trace(A) = 1.838476590271330
奇怪的是,它为它传递给双变量“Trace_A”跟踪但不适用于矩阵本身。任何想法我在这里做错了吗?
没有。据推测,lib本身在打印之前会对流进行精确设置。 – 2014-11-08 16:46:59