Я некоторое время программировал на C, и сейчас я собираюсь изучать C ++. Когда я начал изучать C ++, я также изменил свой компилятор со стандартного MinGW, включенного в Codeblocks по умолчанию, на компилятор MSYS2 mingw-w64. Теперь у меня странное поведение, когда я компилирую следующий код в 32-битную программу:
using namespace std;
int main()
{
double two=2.0;
cout << "(sqrt(2.0)==sqrt(two)): " << (sqrt(2.0)==sqrt(two)) << endl;
cout << "(sqrt(2.0)<=sqrt(two)): " << (sqrt(2.0)<=sqrt(two)) << endl;
cout << "(sqrt(2.0)>=sqrt(two)): " << (sqrt(2.0)>=sqrt(two)) << endl;
cout << "(sqrt(2.0)<sqrt(two)): " << (sqrt(2.0)<sqrt(two)) << endl;
cout << "(sqrt(2.0)>sqrt(two)): " << (sqrt(2.0)>sqrt(two)) << endl;
cout << "(sqrt(2.0)!=sqrt(two)): " << (sqrt(2.0)!=sqrt(two)) << endl;
return 0;
}
Здесь я выполняю много сравнений, предполагая, что первые три выражения будут напечатаны как 1, а последние три - как 0 Вместо этого я получаю следующий вывод:
(sqrt(2.0)==sqrt(two)): 0
(sqrt(2.0)<=sqrt(two)): 0
(sqrt(2.0)>=sqrt(two)): 1
(sqrt(2.0)<sqrt(two)): 0
(sqrt(2.0)>sqrt(two)): 1
(sqrt(2.0)!=sqrt(two)): 1
Еще более странно, если я скомпилирую свою программу с 64-битной версией компилятора MSYS2 в 64-битную версию или использую компилятор MinGW по умолчанию, включенный в CodeBlocks. программа возвращает ожидаемый результат три раза 1, затем три раза 0.
Может быть, что-то не так с компилятором или это просто я как новичок ie? И если это я, что я делаю не так?
PS: я использую компилятор msys2 внутри кодовых блоков и следующие флаги компилятора:
g++.exe -Wall -fexceptions -g -Wextra -Wall -std=c++11 -m32 -c *path to my main.cpp file* -o obj\Debug\main.o
g++.exe -o bin\Debug\FloatingpointTest.exe obj\Debug\main.o -m32