pętla for i prosty warunek
Ostatnio zmodyfikowano 2021-03-24 20:08
namesapace Temat założony przez niniejszego użytkownika |
pętla for i prosty warunek » 2021-03-23 19:55:19 Czy ktoś mi jest w stanie wytłumaczyć dlaczego pętla for(float a=0.01;a<0.01;a*=10) { cout<<"Tak"; } wykona się,a for(float a=0.1;a<0.1;a*=10) { cout<<"Tak"; } lub for(float a=0.001;a<0.001;a*=10) { cout<<"Tak"; } nie. W tej pierwszej pętli warunek daje false, a mimo to pętla i tak się wykonuje, w dwóch poniżej już jest poprawnie. |
|
pekfos |
» 2021-03-23 21:44:34 W tej pierwszej pętli warunek daje false, a mimo to pętla i tak się wykonuje Pętla się wykonuje, więc warunek musi być prawdziwy. #include <iostream> int main() { float a = 0.01; std::cout <<( a < 0.01 ) << '\n'; } 1
No i jest prawdziwy. W systemie dwójkowym jedna setna ma nieskończoną liczbę cyfr po przecinku, tak samo jak jedna trzecia w systemie dziesiętnym. Oczywiście nie masz w pamięci wszystkich tych cyfr, a zamiast tego operujesz na jakimś przybliżeniu. Ten warunek porównuje liczby o różnej precyzji, bo a jest typu float, a 0.01 jest typu double. Możesz użyć 0.01f by stała miała też typ float, ale i tak nie powinieneś nigdy polegać na tym, że liczby zmiennoprzecinkowe są sobie równe, bo arytmetyka będzie wprowadzać dodatkowe błędy obliczeń. |
|
namesapace Temat założony przez niniejszego użytkownika |
» 2021-03-24 20:08:46 Dziękuję za wyjaśnienie. |
|
« 1 » |