本周末我升级到OSX 10.7 Lion,现在我正试图通过我的所有单元和回归测试...但是有很多问题。我的几个回归测试现在产生不同的数值结果(例如在小数点后三位)。这是一个惊喜,因为我在OSX 10.6和Linux之间以及各种编译器之间获得了一致的结果(因为我们已经应用了一些技巧来保持数值稳定到可比性)......但似乎OSX 10.7产生了截然不同的结果。我们当然可以提高门槛以使所有这些测试都通过,但我不愿意,因为这会削弱测试。
默认情况下,“g ++”现在别名为“llvm-g ++ - 4.2”。有人可以向我解释一下g ++ vs llvm的结果会有什么样的差异吗?如果我想保留我的回归结果,我基本上必须在llvm和-ffast-math之间做出选择吗?
答案 0 :(得分:1)
正常情况下llvm-gcc-4.2和gcc-4.2之间的基本浮点计算应该没有实质性的差异;基本的浮点运算将使用llvm-gcc和gcc-4.2生成功能相同的代码序列(假设默认编译器标志)。
你提到了-ffast-math;当使用-ffast-math时,LLVM通常会进行相对较少的额外优化。如果你依赖于编译器进行某些转换,那可能会导致很大的差异,我想。
除此之外,如果没有实际的测试用例,真的很难说。