Witam. Zająłem się problemem wyliczenia wartości trójmianu kwadratowego: x^3 + px = q. Wynik ma być wartością naturalną(wypisujemy wtedy wartość x), w przeciwnym wypadku wypisujemy "NIE".
Spotkałem się z problemem gdzie przy porównaniu dwóch zmiennych double o wartości 2 dostaje wartość false. Przy konwersji liczby wartości int bądź użyciu funkcji: trunc,floor czy rzutowaniu typu z double=2 otrzymuje int=1 ( co również jest dla mnie zagadką).
Mógłbym prosić o wyjaśnienie tego zagadnienia, bądź sugestie co do rozwiązania tego problemu?
Testowe dane które wprowadzałem:
2
3 14
7 10
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
//PRZYSPIESZENIE
int z; //LICZBA TESTOW
double x; //ZMIENNA DO PRZECHOWANIA "OBCIETEJ WARTOSCI"
cin >> z;
long long p,q; //WARTOSCI POTRZEBNE DO WZORU
double wynik[z];
for (int i=0; i<z; i++)
{
cin >> p >> q;//IMPLEMENTACJA WZORU CARDANA
wynik[i]=cbrt( (q / 2) + sqrt(pow(q / 2, 2) + pow( p / 3,3 )) ) - cbrt( (-q/2) + sqrt(pow(q / 2, 2) + pow( p / 3,3 )));
}//OBLICZENIE WARTOSCI X
for (int i=0; i<z; i++)
{
x = round(wynik[i]);
cout << x << "<- to jest X" << endl;
cout << wynik[i] << "<- to jest wynik" << endl;
if (wynik[i] == x )cout << wynik[i];// <--TUTAJ WYSTEPUJE PROBLEM
else cout << "NIE" << endl;
}
return 0;
}