PawelBo Temat założony przez niniejszego użytkownika |
cmath i precyzja liczb » 2010-12-26 07:46:36 Witam, jestem tu nowy, dopiero się uczę C++ i ugrzęzłem przy jednym zadaniu... nie jest to projekt na zaliczenie, tylko przykładowe zadanie z podręcznika. Chodzi o 0 (zero)? Dodałem do programu sqrt aby sprawdzić poprawność wyniku i niestety sqrt(0) nie oblicza, a w zasadzie to mu się nie dziwię, bo jest to sqrt(-0), mimo setprecision. Podaję cały program:
#include <iostream> #include <cmath> #include <iomanip> #include <cstdlib> using namespace std;
int main( int argc, char * argv[] ) { double x; cout << "x\ty\tsqrt(x)"; for( x = - 0.5; x < 1.55; x += 0.1 ) { cout << setiosflags( ios_base::fixed ); cout << setprecision( 1 ); cout << endl << x << "\t"; if( x < 0.05 ) cout << x << "\t" << sqrt( x ); else if( x < 1.05 ) cout << 2 * x << "\t" << sqrt( x ); else cout << fabs( x - 2 ) << "\t" << sqrt( x ); } cout << endl; system( "pause" ); return 0; } |
|
szyx_yankez |
» 2010-12-26 08:13:05 Skorzystaj z metody pow.
pow(potęgowana liczba, stopień potęgi)
#include <iostream> #include <cmath> #include <iomanip> #include <cstdlib> using namespace std;
int main( int argc, char * argv[] ) { double x; cout << "x\ty\tsqrt(x)"; for( x = - 0.5; x < 1.55; x += 0.1 ) { cout << setiosflags( ios_base::fixed ); cout << setprecision( 2 ); cout << endl << x << "\t"; if( x < 0.05 ) cout << x << "\t" << pow( x, 2 ); else if( x < 1.05 ) cout << 2 * x << "\t" << pow( x, 2 ); else cout << fabs( x - 2 ) << "\t" << pow( x, 2 ); } cout << endl; system( "pause" ); return 0; } |
|
PawelBo Temat założony przez niniejszego użytkownika |
int/double c.0 » 2010-12-26 08:37:06 rozwiązałem to inaczej, ale dzięki:)
#include <iostream> #include <cmath> #include <cstdlib> using namespace std;
int main( int argc, char * argv[] ) { double b, x; int a; cout << "x\ty\tsqrt(x)"; for( a = - 5; a < 16; a++ ) { b = 10.0; x = a / b; cout << endl << x << "\t"; if( x < 0.05 ) cout << x << "\t" << sqrt( x ); else if( x < 1.05 ) cout << 2 * x << "\t" << sqrt( x ); else cout << fabs( x - 2 ) << "\t" << sqrt( x ); } cout << endl; system( "pause" ); return 0; }
|
|
PawelBo Temat założony przez niniejszego użytkownika |
jednak nie do konca... » 2010-12-30 07:28:49 po przemyśleniach problem jest nie do końca rozwiązany... bo chodzi o zwiększanie pętli liczbą rzeczywistą np. +0.7, nie wiem jak to zrobić? może ktoś ma jakiś pomysł? |
|
DejaVu |
» 2010-12-30 07:32:58 for( double a = - 5; a < 16; a += 0.7 ) { }
|
|
PawelBo Temat założony przez niniejszego użytkownika |
0? » 2010-12-30 07:34:55 DejaVu -> zerknij na mój pierwszy wpis - chodzi o '0' - żeby zero było zerem a nie np. '-0.0'? |
|
DejaVu |
» 2010-12-30 07:38:09 if( wynik < 0 ) wynik = - wynik;
lub
if( wynik < 0 ) wynik = 0;
Istnieje coś takiego jak błędy wynikające z obliczeń na liczbach rzeczywistych. Na 50 miejscu po przecinku pojawia się pewnie jakaś cyferka i stąd masz znak ujemny przed 0. |
|
PawelBo Temat założony przez niniejszego użytkownika |
b/t » 2010-12-31 16:51:18 DejaVu -> jeżeli już to if(( wynik < 0 )&& ( wynik > -0.1)) wynik = 0; jeżeli zwiększamy o 0.1, ale nie podoba mi się ten sposób rozwiązania problemu, jak coś wymyślę to dam znać :) |
|
« 1 » 2 |