[C++] Pierwiastkowanie - dziwne zachowanie programu
Ostatnio zmodyfikowano 2013-02-28 16:30
Berux Temat założony przez niniejszego użytkownika |
[C++] Pierwiastkowanie - dziwne zachowanie programu » 2013-02-27 20:32:10 Witam. Wiem, że może się wam to wydać dość dziwne, że piszę program obliczający pierwiastek bez użycia przeznaczonej do tego funkcji. Jednak myślę, że jest to dobre ćwiczenie. Program zachowuje się dość dziwnie. Oto kod: #include <iostream>
using namespace std;
int main() { double wynik; cout << "Podaj liczbe, ktorej pierwiastek chcesz obliczyc: "; double liczba; cin >> liczba; cout << "Podaj stopien pierwiastka: "; int stopien; cin >> stopien; for( double i = 0.001;; i += 0.001 ) { wynik = i; cout << wynik << endl; for( int j = 2; j <= stopien; j++ ) { wynik *= i; } if( wynik == liczba ) { cout << wynik; break; } if( wynik < liczba ) continue; if( wynik > liczba ) { i -= 0.001; wynik = i; for( int j = 2; j <= stopien; j++ ) { wynik *= i; } cout << wynik; break; } } return 0; }
Program się kompiluje, jednak po wpisaniu np. w pierwszym wczytywaniu: 100, a w drugim 2 (czyli pierwiastek kwadratowy ze stu), to do pewnego momentu program zachowuje się dobrze: ... 9.996 9.997 9.998 9.999 10 10.1
i za chwile ponownie wypisuję zmienną wynik, a tu: 100 Trochę dziwny problem. Proszę o pomoc i z góry dziękuję :) /edit: Jeśli coś źle wytłumaczyłem, to proszę, o samodzielne sprawdzenie kodu w swoim IDE ;) Na IDEONE działa tak samo jak u mnie. |
|
Monika90 |
» 2013-02-27 22:07:39 Pominę fakt, że pierwiastki oblicza się w inny sposób... Sprawdzanie if( wynik == liczba ) możesz sobie darować, bo prawie nigdy nie będa sobie równe, dodaj cout.precision( 17 ); na początku main , to zrozumiesz. Zatem, prędzej czy później sterowanie trafi do tego fragmentu: if( wynik > liczba ) { i -= 0.001; wynik = i; for( int j = 2; j <= stopien; j++ ) { wynik *= i; } cout << '!' << wynik; break; }
gdzie i jest równe prawie 10, podnosisz je do kwadratu, więc wychodzi prawie 100, które jest drukowane, następnie break przerywa pętlę i program się kończy. |
|
Chlorek |
» 2013-02-27 22:14:16 Jak zobaczyłem jak działa ten kod to od razu pomyślałem, że to nie ma prawa dobrze działać. Generalnie pierwiastki nawet "we własny sposób" liczy się inaczej, jeszcze liczba typu 100 to dobra liczba, ale bardzo wiele innych może Cię zawieść... Co do problemu, jakoś mam ciężką głowę teraz i nie mogę za bardzo rozgryźć gdzie jest błąd. Ale odpowiedź użytkownika Monika90 zdaje się być poprawna. Podnosisz tam liczbę to potęgi, jakoś to wszystko tak dziwnie wygląda... |
|
usmiech |
» 2013-02-28 01:31:20 Warto nauczyc sie debugging :) |
|
Berux Temat założony przez niniejszego użytkownika |
» 2013-02-28 15:29:26 Jeśli chodzi o uwagi, to nie miałem jeszcze w szkole pierwiastków, więc nie wiem jak się je oblicza :( Proszę o wyrozumiałość :)
@up Może z debugowaniem nie jest taki zły pomysł. Wolałbym jednak najpierw przeczytać symfonie ;) |
|
kubawal |
» 2013-02-28 16:30:32 |
|
« 1 » |