Я использую библиотеку линейных алгебр Армадилло для диагонализации матриц. Мне нужно увеличить количество цифр, отображаемых/записанных в файл в конце. Согласно Армадилло reference, «arma :: mat» создаст двойную матрицу. Итак, я попытался использовать std :: setprecision из «iomanip», но это не совсем сработало. Вот минимальный код, который фиксирует проблему:Как увеличить количество цифр, отображаемых при использовании библиотеки 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 'setprecision' поток перед печатью. –