我使用Armadillo线性代数库来对齐矩阵。我需要增加最后显示/写入文件的位数。根据犰狳的reference," arma :: mat"将创建一个双矩阵。所以,我尝试使用来自" iomanip"的std :: setprecision,但它并没有完全奏效。这是一个捕获问题的最小代码:
#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
奇怪的是,它适用于传递给双变量的跟踪&#34; Trace_A&#34;但不是矩阵本身。知道我在这里做错了吗?
答案 0 :(得分:3)
我想我想出了如何做到这一点。可以使用“raw_print”完成:
A.raw_print(std::cout);
这给出了:
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
0.84018771715 0.19755136929 0.47739705186 0.91619506800 0.01630057162
0.39438292682 0.33522275571 0.62887092476 0.63571172796 0.24288677063
0.78309922376 0.76822959481 0.36478447279 0.71729692943 0.13723157679
0.79844003348 0.27777471080 0.51340091020 0.14160255536 0.80417675423
0.91164735794 0.55396995580 0.95222972517 0.60696887626 0.15667908925
答案 1 :(得分:0)
以下是使用raw_print之前设置精度的方法之一
arma::mat A = arma::randu<arma::mat>(5,5);
cout.precision(11);
cout.setf(ios::fixed);
A.raw_print(cout, "A:");
正常设置精度也可以
arma::mat A = arma::randu<arma::mat>(5,5);
cout << fixed << setprecision(11);
A.raw_print(cout, "A:");