Странное поведение msys2 mingw-w64 32-битный компилятор - PullRequest
0 голосов
/ 29 апреля 2020

Я некоторое время программировал на 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
...