Mac vs Windows: Eigen::Vector3f(0,0,0).normalized()



为什么使用Mac和Windows上的Eigen看到此简单的3D向量操作的不同结果?

我在MacBook Pro(MacOS 10.12.6(上编写了一些仿真代码,并进行了广泛的测试。一旦我的同事尝试在窗户上使用它,他就有问题。他给了我一个特定的失败案件。它对我有用。当我们挖进去时,它归结为试图将3D零向量归一化,因此尝试除以零。当我得到(0、0、0(时,他得到了(Nan,Nan,Nan(。在发生这种情况的情况下,零结果是一个软/无害的失败,这就是为什么我在测试中没有注意到它的原因。

很明显,北方媒介是正确的答案。我在流浪者下运行的Ubuntu构建中尝试了一下(-nan,-nan,-nan(。

有人知道为什么我在MacOS上得到(0,0,0(吗?我认为默认情况下Xcode使用LLVM。Ubuntu构建使用的clang。

我的怀疑是您在MacOS上获得了较新的特征版。normalize()的行为已经改变了一段时间:https://bitbucket.org/eigen/eigen/commits/12f866a746

这里有关于预期行为的讨论:http://eigen.tuxfamily.org/bz/show_bug.cgi?id=977

检查您的编译器标志。您可能启用了快速数学(在GCC中的-ffast-math(。这启用了-ffinite-math-only(再次是GCC(,我引用:

允许对浮点算术进行优化,假定参数和结果不是nans或 -infs。

最新更新