Michael Mößner
2018-02-28 10:41:02 UTC
Hello
I get incorrect results, when I invert a 4x4 matrix with gcc7.3 and the
compiler option -ffast-math. Unfortunatly, I don't get access to the bug
tracker, so I post it here.
Example code: (compile with "g++ test.cpp -O3 -ffast-math")
#include <Eigen/Dense>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
   Eigen::Matrix<double,4,4> test;
   test(0,0) = 1.; test(0,1) = 0.; test(0,2) = 0.; test(0,3) = 0.;
   test(1,0) = 0.; test(1,1) = 1.; test(1,2) = 0.; test(1,3) = 0.;
   test(2,0) = 0.; test(2,1) = 0.; test(2,2) = 1.; test(2,3) = 0.;
   test(3,0) = 0.; test(3,1) = 0.; test(3,2) = 0.; test(3,3) = 1.;
   cerr << test.inverse() << endl;
   return 1;
}
------------------------------
This results in
1Â 0Â 0Â 0
-0 -1 -0 -0
 0 0 1 0
-0 -0 -0 -1
------------------------------
The expected result is
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
---------------------------------
I also tested this code with gcc4.8.5, gcc5.2 and clang6.0.0 where the
problem does NOT occur.
I also tested with gcc7.2 where the problem occurs.
The problem does NOT occur when ommitting the -ffast-math or when
compiling with -O0
My Eigen version:
3.3.4
My system data:
SUSE Linux Enterprise Desktop 12 SP2
Intel(R) Xeon(R) CPU E3-1276 v3 @ 3.60GHz
---------------------------
I also tested the following systems where the bug also occurs:
----------------------------
SUSE Linux Enterprise Desktop 11 SP2
Intel(R) Xeon(R) CPU E3-1276 v3 @ 3.60GHz
------------------------------
SUSE Linux Enterprise Desktop 12 SP2
Intel(R) Xeon(R) CPU E3-1230 @ 3.20GHz
------------------------------
Best regards
Michael
I get incorrect results, when I invert a 4x4 matrix with gcc7.3 and the
compiler option -ffast-math. Unfortunatly, I don't get access to the bug
tracker, so I post it here.
Example code: (compile with "g++ test.cpp -O3 -ffast-math")
#include <Eigen/Dense>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
   Eigen::Matrix<double,4,4> test;
   test(0,0) = 1.; test(0,1) = 0.; test(0,2) = 0.; test(0,3) = 0.;
   test(1,0) = 0.; test(1,1) = 1.; test(1,2) = 0.; test(1,3) = 0.;
   test(2,0) = 0.; test(2,1) = 0.; test(2,2) = 1.; test(2,3) = 0.;
   test(3,0) = 0.; test(3,1) = 0.; test(3,2) = 0.; test(3,3) = 1.;
   cerr << test.inverse() << endl;
   return 1;
}
------------------------------
This results in
1Â 0Â 0Â 0
-0 -1 -0 -0
 0 0 1 0
-0 -0 -0 -1
------------------------------
The expected result is
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
---------------------------------
I also tested this code with gcc4.8.5, gcc5.2 and clang6.0.0 where the
problem does NOT occur.
I also tested with gcc7.2 where the problem occurs.
The problem does NOT occur when ommitting the -ffast-math or when
compiling with -O0
My Eigen version:
3.3.4
My system data:
SUSE Linux Enterprise Desktop 12 SP2
Intel(R) Xeon(R) CPU E3-1276 v3 @ 3.60GHz
---------------------------
I also tested the following systems where the bug also occurs:
----------------------------
SUSE Linux Enterprise Desktop 11 SP2
Intel(R) Xeon(R) CPU E3-1276 v3 @ 3.60GHz
------------------------------
SUSE Linux Enterprise Desktop 12 SP2
Intel(R) Xeon(R) CPU E3-1230 @ 3.20GHz
------------------------------
Best regards
Michael