Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pętla for i prosty warunek

Ostatnio zmodyfikowano 2021-03-24 20:08
Autor Wiadomość
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.
P-178333
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.
C/C++
#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ń.
P-178334
namesapace
Temat założony przez niniejszego użytkownika
» 2021-03-24 20:08:46
Dziękuję za wyjaśnienie.
P-178340
« 1 »
  Strona 1 z 1