Juju Napisano Marzec 11, 2019 Autor Zgłoś 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
Storm Napisano Marzec 11, 2019 Zgłoś 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
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.