Summary: | M.log().exp() != M for random 3x3 double matrix | ||||||
---|---|---|---|---|---|---|---|
Product: | Eigen | Reporter: | Hauke Heibel <hauke.heibel> | ||||
Component: | Unsupported modules | Assignee: | Nobody <eigen.nobody> | ||||
Status: | NEW --- | ||||||
Severity: | Unknown | CC: | jitseniesen | ||||
Priority: | Normal | ||||||
Version: | 3.2 | ||||||
Hardware: | x86 - general | ||||||
OS: | Windows | ||||||
Whiteboard: | |||||||
Attachments: |
|
Sample output on VC11: M.log().exp() == M evaluates to false M = -0.997497 0.617481 -0.299417 0.127171 0.170019 0.791925 -0.613392 -0.0402539 0.64568 M.log().exp() = 1.06493 -0.256064 0.38904 -0.419692 0.401644 0.609377 0.040232 -0.317098 0.863866 interp(M,N,s) == interp(N,M,1-s) evaluates to true I tried it on Debian computer and found that with GCC 4.8.2, 4.7.3, 4.6.4, 4.5.3 and 4.4.7 and with LLVM 3.3 it works fine (compiled with -O3 in 64 bits). However, Christoph said that his version of GCC (I think 4.7.1) generates an Internal Compiler Error. -- GitLab Migration Automatic Message -- This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/756. |
Created attachment 426 [details] Sample code to reproduce the issue The code attached in the sample file does not work, i.e. Matrix3d M = Matrix3d::Random(); bool is_approx = M.isApprox(M.log().exp(), 1e-5); evaluates to is_approx == false. The weird part is that the general interpolation works (see attached example). My compiler is VC11, 64bit.