Эта простая тестовая программа ...
#include <iostream>
#include <Eigen/Dense>
#include <unsupported/Eigen/MatrixFunctions>
using namespace Eigen;
int main()
{
Matrix<double,1,1> m11;
Matrix<double,2,2> m22;
Matrix<double,3,3> m33;
Matrix<double,4,4> m44;
m22.setZero();
m33.setZero();
m44.setZero();
std::cout << "Eigen version: " << EIGEN_WORLD_VERSION << "."
<< EIGEN_MAJOR_VERSION << "." << EIGEN_MINOR_VERSION << "\n";
std::cout << "11: " << m11.log() << "\n";
std::cout << "22: " << m22.log() << "\n";
std::cout << "33: " << m33.log() << "\n";
std::cout << "44: " << m44.log() << "\n";
}
зависает при вычислении m33.log (), выдавая:
Eigen version: 3.3.5
11: -728.932
22: -nan -nan
-nan -nan
[hangs here at 100% cpu]
с
g++ --version
g++ (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6)
, а также с
clang++ --version
clang version 5.0.2 (tags/RELEASE_502/final)
, поэтому я знаю, что он недействителен, но, возможно, сбой будет лучше, чем зависание, или мне действительно всегда нужно проверять isInvertible () && все собственные значения перед вызовом log ()?