Skocz do zawartości

problem z float'em


Juju

Recommended Posts

Witam!

Mam pewien problem z float'em ( a wlasciwe ze wszystkimi zmiennoprzecinkowymi), otoz odejmujac wychodza mi jakies bzdury tj:

float x = 1;

        while(x >= 0)
        {
                x -= 0.1;
                std::cout << x<< std::endl;
        }

wyniki sa u mnie, hmm... dosc dziwne:

[quote=kompilator]
0.9
0.8
// tak az do...
0.2
// ale teraz...
0.0999999
-7.30157e-08 //podejrzewam ze u innych te dwa wyniki beda inne
// tak samo inne sa dla double i long double

[/quote]

smieszne ale prawdziwe...

co Wy o tym sadzicie...

p.s. pisze w bcb 6.0 personal

//edit
ale jestem slepy, pomylily mi sie dzialy, ale juz prznioslem :-)

//edit 2
probowalem tego kodu w dev-ie, wyniki takie same, sfrustrowanie siega zenitu

Link do komentarza
Udostępnij na innych stronach

Typy zmienoprzecinkowe charakteryzuja sie tym, ze maja skonczona dokladnosc w przeciwienstwie do calkowitych. Tzn iles bitow przypada na na ceche i iles na mantyse(Liczba=M*2^C).Poza tym 0.1 ma chyba nieskonczone rozwiniecie(gdybys chcial 0.1 przedstawic binarnie) w przeciwienstwie np do 0.5 .Stad ta niedokladnosc. Dlatego nigdy nie powinno sie dawac warunku rownosci dla liczb zmiennoprzecinkowych bo program pojdzie w maliny.

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...