代码之家  ›  专栏  ›  技术社区  ›  Craig Reynolds

Mac vs Windows:Eigen::Vector3f(0,0,0)。标准化()

  •  1
  • Craig Reynolds  · 技术社区  · 7 年前

    为什么我在Mac和Windows上使用Eigen进行这个简单的3d向量操作时会看到不同的结果?

    我在MacBook Pro(macOS 10.12.6)上编写了一些模拟代码,并对其进行了广泛的测试。当我的同事尝试在Windows上使用它时,他就遇到了问题。他给了我一个具体的失败案例。这对我有用。当我们挖进去的时候, 归根结底,这是一种对3d零向量进行归一化的尝试,也是一种除以零的尝试。他得到了(楠,楠,楠),而我得到了(0,0,0) . 在发生的情况下,零结果是软/无害的失败,这就是为什么我在测试中没有注意到它。

    很明显,NAN向量是正确的答案。我在Vagrant下运行的Ubuntu构建中尝试了它,得到了(-nan,-nan,-nan)。

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   chtz    7 年前

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

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

        2
  •  1
  •   Avi Ginsburg Nitin Sanghi    7 年前

    检查编译器标志。您可能启用了快速数学( -ffast-math 在gcc中)。这将启用 -ffinite-math-only (同样,gcc)其中 quote :

    允许对假定参数和结果不是NaN或+-INF的浮点算术进行优化。