Lorsque vous utilisez std::atan2
J'obtiens des résultats différents selon que j'effectue une compilation croisée pour une architecture 32 bits plutôt qu'une compilation pour l'architecture 64 bits (native).
$ 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
J'espérais que les résultats seraient les mêmes, puisque je porte une application sur 64 bits et que j'ai besoin de résultats identiques en virgule flottante. Comme vous pouvez le constater, j'ai déjà essayé -ffp-contract=off -ffloat-store
ce qui, j'en suis conscient, peut provoquer des incohérences en virgule flottante. Y a-t-il autre chose qui m'échappe ? Ou les fonctions trigonométriques ne sont-elles tout simplement pas normalisées de cette manière ?
J'utilise Ubuntu 18.04.2, avec gcc 7.5.0. Le processeur est un i7-1065G7.