Witam, po uruchomieniu tak skonstruowanego programu, powinienem uzyskać wynik -2, jednak dostaje wynik -2-1.11022e-16i, i nie wiem czym jest to spowodowane. Dodam, że zmieniając w klasie double re, im; na float re, im; program działa prawidłowo. Może ktoś wie na czym polega błąd?
class LiczbaZespolona{
public:
LiczbaZespolona operator * (const LiczbaZespolona &L);
LiczbaZespolona(double _re, double _im);
private:
double re, im;
friend ostream & operator << (ostream &str, const LiczbaZespolona &L);
};
LiczbaZespolona LiczbaZespolona::operator * (const LiczbaZespolona &L){
return LiczbaZespolona(re*L.re-im*L.im,im*L.re+re*L.im);
}
LiczbaZespolona::LiczbaZespolona(double _re, double _im): re(_re), im(_im)
{}
int main(){
LiczbaZespolona liczba_1(3, -1), liczba_2(-0.6,-0.2);
LiczbaZespolona wynik = liczba_1 * liczba_2;
cout << wynik << endl;
return 0;
}
ostream & operator << (ostream &str, const LiczbaZespolona &L){
if(L.im == 0) str << L.re;
if((L.re == 0) && (L.im != 0) && (L.im != 1)) str << L.im << "i";
if((L.re != 0 ) && (L.im > 0) && (L.im != 1)) str << L.re << "+" << L.im << "i";
if((L.re != 0) && (L.im < 0) && (L.im != 1)) str << L.re << L.im << "i";
if((L.re == 0) && (L.im != 0) && (L.im == 1)) str << "i";
if((L.re != 0 ) && (L.im > 0) && (L.im == 1)) str << L.re << "+" << "i";
if((L.re != 0) && (L.im < 0) && (L.im == 1)) str << L.re << "i";
return str;
}