Wątek przeniesiony 2015-10-07 12:03 z C/C++ przez ŁF.

Pętla nie osiąga podanej wartości

0

Szanowni koledzy mój kod wygląda następująco

#include <fstream>
#include <iostream>
#include <math.h>
#include <iomanip>

using namespace std;

int main()
{   
   double y;
     fstream file;
       file.open("wyniki.txt",ios::in|ios::out|ios::trunc);

   for(double x = 0.20,a = 1; x <= 0.50; x += 0.01 , a++)
     {

       if(x < 0.30)y = -log(pow(x,2)) + exp(x);

         else if ((x >= 0.30) &&  (x < 0.40)) y = (1/tan(pow(x,2) + 4));

            else if (x >= 0.40) y = tan(pow(x,2) + 1);


                 cout << y << endl;

                 file << "|Dla x = " << setw(4)<< x << ",y => " <<setw(9) << y << "|\t";
         
       if(!(int(a) % 2))
         {
           file << "\n";

         }

      }
   file.close();



}
 

Czy ktoś mógłby mi rozjaśnić czemu nie ma żadnej wartości dla x = 0.50, i jak to mogę poprawić?

3

Zrobić pętlę normalnie na intcie, i do obliczeń dzielić go przez 100.

5

Ponieważ używanie liczb zmiennoprzecinkowych wiąże się z akceptacją ich niedokładności. == w ich przypadku prawie nigdy nie ma zastosowania.

x <= 0.505 powinno załatwić sprawę.

Pierwszy link z google dotyczący problemu: http://floating-point-gui.de/basic/

PS: formatuj poprawnie kod, nieprzyjemnie się to czyta.
Czy tak nie ładniej?

#include <fstream>
#include <iostream>
#include <math.h>
#include <iomanip>

using namespace std;

int main()
{
    double y;
    fstream file;
    file.open("wyniki.txt", ios::in | ios::out | ios::trunc);

    for (double x = 0.20, a = 1; x <= 0.50; x += 0.01, a++)
    {

        if (x < 0.30)
            y = -log(pow(x, 2)) + exp(x);

        else if ((x >= 0.30) && (x < 0.40))
            y = (1 / tan(pow(x, 2) + 4));

        else if (x >= 0.40)
            y = tan(pow(x, 2) + 1);


        cout << y << endl;

        file << "|Dla x = " << setw(4) << x << ",y => " << setw(9) << y << "|\t";

        if (!(int(a) % 2))
        {
            file << "\n";
        }
    }
    file.close();
}
0

W zasadzie lepiej i dokładniej byłoby x wyliczać jako wartość początkowa + (i * 0.01) Do poczytania: http://kaczus.ppa.pl/art/liczbyzmiennoprzecinkowe,19.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1