6
的總和我有MinGW的GCC 4.8.1和下面的代碼:比較 - 平方根
#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;
}
如果有-O0
編譯,程序打印預期的結果:
first == second
但是,如果編號爲-O1
,-O2
或-O3
,程序打印出:(結果爲ideone)
first < second
first == second
爲什麼?如何解決它?
對於所有四個標誌(使用鏗鏘聲),coliru [它打印](http://coliru.stacked-crooked.com/a/0faa177acceb3caa)'first == second'。 – Shoe
使用QtCreator 3.0.0,我得到了與MinGW 4.8相同的錯誤結果,而MSVC 2012 32位和64位在發佈模式下正常工作。所有調試配置工作。奇怪。 – Korchkidu
此外,第一次和第二次打印似乎會根據打印結果是在打印之前還是在比較之後更改結果。 – Korchkidu