Divergierende std::atan2-Einheit mit der geringsten PräzisionC++

Programme in C++. Entwicklerforum
Anonymous
 Divergierende std::atan2-Einheit mit der geringsten Präzision

Post by Anonymous »

Ich schreibe ein plattformübergreifendes Programm für Windows und Linux und möchte, dass es sich auf beiden Plattformen so ähnlich wie möglich verhält. Ich verwende etwas Mathematik im Programm, z.B. std::atan2-Funktionsaufrufe, und ich habe festgestellt, dass das Ergebnis für dieselben Eingabewerte manchmal in der Einheit mit der geringsten Genauigkeit abweicht, abhängig von der Plattform oder den Optimierungseinstellungen.
Betrachten Sie dieses reduzierte Beispiel:

Code: Select all

#include 
#include 

int main() {
// 0.14189707 with GCC on Linux
// 0.14189705 with MSVC (and compile-time evaluation in GCC)
std::print( "{}", std::atan2( 1.f, 7.f ) );
}
Online-Demo. Obwohl der Unterschied zwischen den Ergebnissen gering ist, wird er durch die folgenden Berechnungen in meinem Programm verstärkt, daher möchte ich den Unterschied vollständig vermeiden.
Sind auf diese Weise divergierende Implementierungen zulässig, sofern der gleiche Rundungsmodus verwendet wird? Gibt es Compiler-Flags, um die Divergenz zu beseitigen oder zu minimieren?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post