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 |