Armadillo 線形代数ライブラリを使用して行列を対角化しています。最後にファイルに表示/書き込みされる桁数を増やす必要があります。Armadillo のリファレンスによると、「arma::mat」は double 行列を作成します。そこで、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
興味深いことに、これは double 変数 "Trace_A" に渡されるトレースでは機能しますが、マトリックス自体では機能しません。私がここで間違っていることは何か分かりますか?