problem z przeliczaniem liczba w notacji naukowej zamiast zera

0

Problem dotyczy tego kodu: http://pastebin.com/34qXepnY

A ściślej funkcji obracającej punkt o dany kąt:

Funkcja "obracaj"

 void punkt::obracaj(float kat)
{
    float c=0;
    kat=(M_PI*kat)/180.0f; //zmiana miary kata na radiany
    c=x;
    x=(x*cosf(kat))-(y*sinf(kat));
    y=(c*sinf(kat))+(y*cosf(kat));
}

Np. współrzędne punktu to x=15 i y=0, a my chcemy ten punkt obrócić o 180 stopni, to powinniśmy otrzymać x=-15 i y=0. O ile pierwsza współrzędna będzie prawidłowa, to już druga będzie niezerową liczbą, dodatkowo w notacji naukowej.

Przykład:

user image

Czy da się to jakoś rozwiązać, czy wynika to po prostu z faktu użycia liczby PI, która jest nieskończona ?

0

Spróbuj:

#define pi 3.14

0

Dzięki za podpowiedź. Czyli to po prostu kwestia PI. Wyniku dokładnego raczej nie uzyskam. Po zmniejszeniu dokładności PI do takiej liczby, jak podał kolega wyżej, nie będzie notacji naukowej.

0

zaokrąglij to sobie przy wyświetlaniu, to nie będziesz mieć "notacji naukowej". 1.31*10e-6 to 0,00000131, czyli w przybliżeniu zero. przy wyświetlaniu wyniku z dokładnością do trzech miejsc po przecinku dostaniesz napis 0.000.
policz sobie na double zamiast na float, to będziesz mieć zero z dużo lepszym przybliżeniem, acz nadal nie dokładnie zero.

0
ostream& operator<< (ostream& out, const Punkt& p) {
    out.precision(2);
    out.setf(ios::fixed);
    out << "Wspolrzedna x: " << p.x << endl;
    out << "Wspolrzedna y: " << p.y << endl;
    return out;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1