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

时间:2018-02-07 22:56:50

标签: c++ macos eigen

为什么我在Mac和Windows上使用Eigen对这个简单的三维矢量操作看到不同的结果?

我在MacBook Pro(macOS 10.12.6)上写了一些模拟代码,并对其进行了广泛的测试。一旦我的同事尝试在Windows上使用它,他就会遇到问题。他给了我一个特定的失败案例。它对我有用。当我们挖掘时,它归结为尝试归一化3d零向量,因此尝试除以零。当我得到(0,0,0)时,他得到了(nan,nan,nan)。在它发生的环境中,零结果是软/无害的失败,这就是为什么我在测试中没有注意到它。

显然,nans的矢量是正确的答案。我在Vagrant下运行的Ubuntu构建中尝试了它(-nan,-nan,-nan)。

有谁知道为什么我在macOS上得到(0,0,0)?我认为默认情况下Xcode使用的是LLVM。 Ubuntu构建使用了clang。

2 个答案:

答案 0 :(得分:2)

我怀疑你在macOS上有一个更新的Eigen版本。 normalize()的行为已经改变了一段时间: https://bitbucket.org/eigen/eigen/commits/12f866a746

此处讨论了预期的行为:http://eigen.tuxfamily.org/bz/show_bug.cgi?id=977

答案 1 :(得分:1)

检查编译器标志。您可能已启用快速数学运算(gcc中为-ffast-math)。这会启用-ffinite-math-only(再次,gcc),以及quote

  

允许优化浮点运算,假设参数和结果不是NaN或+ -Infs。