【发布时间】:2021-01-09 11:12:47
【问题描述】:
使用std::atan2 时,我得到的结果不同,具体取决于我是为 32 位架构交叉编译还是为(本机)64 位编译。
$ cat test.cc
#include <cmath>
#include <stdio.h>
int main(int argc, char **argv) {
printf("%f\n", std::atan2(366.470947f, -116.213623f));
}
$ gcc test.cc -o test -lm -ffp-contract=off -ffloat-store
$ ./test
1.877880
$ gcc -m32 test.cc -o test -lm -ffp-contract=off -ffloat-store
$ ./test
1.877881
我希望结果相同,因为我将应用程序移植到 64 位并且需要相同的浮点结果。如您所见,我已经尝试过-ffp-contract=off -ffloat-store,我知道这会导致浮点不一致。还有什么我想念的吗?还是三角函数根本没有以这种方式标准化?
我正在运行带有 gcc 7.5.0 的 Ubuntu 18.04.2。 CPU是i7-1065G7。
【问题讨论】:
-
回复:
I require identical floating point results- 你会过得很糟糕的。 -
感谢您的链接。看来我可能正在遭受同样的事情(不知道我在搜索中是如何错过的)。是的,如果不能保证一致性,这听起来像是个坏消息。
-
这能回答你的问题吗? atan2f gives different results with m32 flag
-
是时候切换到clang了
标签: c++ gcc x86 floating-point precision