Przybliżona wartość pierwiastka
Ostatnio zmodyfikowano 2013-10-20 21:24
koma913 Temat założony przez niniejszego użytkownika |
Przybliżona wartość pierwiastka » 2013-10-20 00:01:33 Witam, mam mały problem, z racji że jestem bardzo początkującym nie wiem co jest jego przyczyną. Do szkoły musze napisać program obliczający przybliżoną wartość pierwiastka. Do tej pory napisałem to: #include <iostream> #include <conio.h>
using namespace std;
int Suma( int nLiczba ) { float Eps; int liter; int Maxiter; float n; float xp; float x; unsigned int a; cout << "Liczba podpierwiastkowa: " << a << endl; cin >> a; cout << "Stopień pierwiastka: " << n << endl; cin >> n; x = a / 2; liter = 0; for( int iter = 0; x - xp > Eps; x = xp ) { xp = 1 / n *( n - 1 ) * x + a / x ^( n - 1 ); if( iter =!Maxiter ) { liter++; } else cout << "Przybliżona wartośc pierwiastka to: " << xp << " obliczona przez wykonanie " << liter << "iteracji" << endl; } getch(); }
Wyskakuje mi taki błąd: 1>c:\users\marcin\documents\visual studio 2010\projects\pierwiastek\pierwiastek\pierwiastek.cpp(31): error C2296: '^' : illegal, left operand has type 'float' Mógłby ktoś coś doradzić? |
|
dambo |
» 2013-10-20 00:04:32 Zmienna "n" jest floatem i nie możesz podnosić do takiej potęgi, spróbuj zmienić na int, ale kilka rzeczy mi tu nie pasuje w tym algorytmie, rozumiem, że to algorytm Newtona, tak ? |
|
koma913 Temat założony przez niniejszego użytkownika |
» 2013-10-20 00:24:31 Nic nie pomaga. Mam zamiar własnie algorytm Newtona napisać, ale nie wiem czy w dobrym kierunku ide. |
|
Mrovqa |
» 2013-10-20 00:35:27 Operator '^' to nie jest potęgowanie, tylko xorowanie. Ponadto - jakbyś chciał napisać najprostszą funkcję do liczenia potęgi to byś miał n iteracji (dla n-tej potęgi). |
|
koma913 Temat założony przez niniejszego użytkownika |
» 2013-10-20 00:51:21 To w sumie nie ma być najprostsza funkcja. Ma być jeszcze z góry zakładana dokładność obliczania np. do 0.00001. A informacje o liczbie pierwiastkowanej, stopniu pierwiastka i dokładności mają byc pobrane z pliku, a potem wynik i liczba iteracji ma być zapisana do drugiego pliku, tylko narazie chciałem zrobić program bez działania na plikach. |
|
Mrovqa |
» 2013-10-20 01:13:06 To w sumie nie ma być najprostsza funkcja. Ma być jeszcze z góry zakładana dokładność obliczania np. do 0.00001. |
Poczytaj o algorytmie szybkiego potęgowania. Co do dokładności to zależy od wielkości danych wejściowych - poczytaj o kodowaniu liczb zmiennoprzecinkowych. |
|
dambo |
» 2013-10-20 01:35:50 miałem podobne zadanie na studiach więc mogę Ci pomóc. Myślę, że ta podpowiedź Ci się przyda - algorytmie Newtona musisz obliczać wartość funkcji oraz jej pochodną i tu dużo osób ma problem, bo nie wie jak zaimplementować pochodną, a to żaden problem - robimy sobie do tego prostą funkcje i tam ją implementujemy tzn mamy obliczyć pochodna z x^5 to robimy funkcje float pochodna( float x ) { return( 5 * x * x * x * x ); }
poczytaj jeszcze o sprawdzaniu dokładności w tym algorytmie, bo są tam chyba 3 kryteria. |
|
koma913 Temat założony przez niniejszego użytkownika |
» 2013-10-20 01:55:47 ok, dzięki. |
|
« 1 » 2 |