Program liczący sumę funkcji
Ostatnio zmodyfikowano 2015-10-25 15:43
Marzgra Temat założony przez niniejszego użytkownika |
Program liczący sumę funkcji » 2015-10-24 23:11:47 Witam Mam zadnie, aby policzyć funkcję: https://goo.gl/atlKaU ,gdzie 0.001 to błąd, 0.2 krok, a [-1,1] przedział, a wyniki zapisać do pliku txt. Program niby napisałam, ale na podstawie cudzego programu, więc nie do końca go rozumiem (wiem, najgłupsze co mogłam zrobić) i teraz moje pytania: 1) jak tutaj działa suma 2) co się dzieje w drugiej części pętli do while 3) co zrobić gdy w pliku zero zapisywane jest jako "5.55112e-017" kod: #include <iostream> #include <fstream> #include <math.h> #include <conio.h> using namespace std;
int k; double x = - 1.0, x2 = 1.0, h = 0.2, blad = 0.001, suma, s; double funkcja( double x, int k ) { return(( pow( - 1, k ) * k ) /( pow( k, 2 ) - 1 ) * sin( k * x ) ); } int main( int argc, char ** argv ) { fstream wyniki; wyniki.open( "wyniki.txt", ios::out ); if( !wyniki ) { cerr << "Nieudane otwarcie pliku do zapisu \n"; return 1; } for( x; x <= x2; x += h ) { k = 2; do { s = funkcja( x, k ); suma = suma + funkcja( x, k ); k++; } while( fabs( s ) >= blad ); wyniki << x << "\t" << suma << "\n"; } cout << "dane zapisane"; getch(); return 0; }
z góry dziękuję za odpowiedzi!! |
|
Monika90 |
» 2015-10-25 14:00:59 Nie zerujesz zmiennej suma, przed każdym wejściem do pętli do-while należy tę zmienna wyzerować. co zrobić gdy w pliku zero zapisywane jest jako "5.55112e-017" |
To znaczy że to nie jest zero. Wielokrotne dodawanie 0.2 do zmiennej x powoduje narastanie błędu zaokrągleń. Jeżeli do -1 pięć razy dodasz 0.2 to wynikiem nie jest 0 tylko 5.55112e-017. Żeby temu zapobiec można użyć zmiennej całkowitoliczbowej z przedziału [-10, 10] i dzielić ją przez 10.0: for( int i = - 10; i <= 10; i += 2 ) { x = i / 10.0; wyniki << x << "\t" << suma << "\n"; }
|
|
Marzgra Temat założony przez niniejszego użytkownika |
» 2015-10-25 15:43:53 Dziękuję, program śmiga aż miło ;) |
|
« 1 » |