это ошибка в реализации собственной матрицы log ()? - PullRequest
0 голосов
/ 16 октября 2018

Эта простая тестовая программа ...

#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 ()?

...