Ich habe MinGW GCC 4.8.1 und den folgenden Code ein:Vergleich der Summe der Quadratwurzeln
#include <iostream>
#include <cmath>
double eval(int a, int b){
return std::sqrt(a) + std::sqrt(b);
}
int main(){
double first = eval(545, 331);
double second = eval(545, 331);
if(first < second)
std::cout << "first < second" << std::endl;
if(first == second)
std::cout << "first == second" << std::endl;
if(first > second)
std::cout << "first > second" << std::endl;
}
Wenn mit -O0
zusammengestellt, das Programm druckt das erwartete Ergebnis:
first == second
Wenn jedoch kompiliert mit -O1
, -O2
oder -O3
, das Programm aus: (das Ergebnis auf ideone)
first < second
first == second
Warum? Wie man es repariert?
Auf coliru [druckt] (http://coliru.stacked-crooked.com/a/0faa177acceb3caa) 'first == second' für alle vier Flags (mit clang). – Shoe
Mit QtCreator 3.0.0 habe ich das gleiche falsche Ergebnis für MinGW 4.8, während MSVC 2012 32 Bit und 64 Bit im Freigabemodus funktionieren. Alle Debug-Konfigurationen funktionieren jedoch. Seltsam. – Korchkidu
Auch das Drucken der ersten und zweiten scheint die Ergebnisse zu ändern, je nachdem, ob sie vor oder nach den Vergleichen gedruckt werden. – Korchkidu