Juju Napisano Marzec 11, 2019 Autor Zgłoś Udostępnij Napisano Marzec 11, 2019 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 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Storm Napisano Marzec 11, 2019 Zgłoś Udostępnij Napisano Marzec 11, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.