Do czego służą liczby przed typem zmiennym?

0
printf("%2.3d",a) 

3 oznacza, że liczbę ma zaokrąglić do 3 miejsca po przecinku, a 2 co oznacza ?

 float a = 1.2f

a tutaj co oznacza te f ?

0

Z twoich linków napotkałem taki tekst i program:

By default 3.2 is treated as double; so to force the compiler to treat it as float, you need to write f at the end.

Just see this interesting demonstration:

float a = 3.2;
if ( a == 3.2 )
    cout << "a is equal to 3.2"<<endl;
else
    cout << "a is not equal to 3.2"<<endl;

float b = 3.2f;
if ( b == 3.2f )
    cout << "b is equal to 3.2f"<<endl;
else
    cout << "b is not equal to 3.2f"<<endl; 

w pierwszym ifie a nie jest równe 3.2 , a w drugim przypadku jest równe 3.2. Czy dobrze to rozumiem, że jak dodamy na koniec f (float b = 3.2f) to wtedy zmienna float ma dokładność typu double ?
Co oznacza słówko treat ? Bo ciągle się spotykam z tłumaczeniem leczyć.

1

Dodanie "f" powoduje, że stała jest traktowana jako float, bo domyślnie kompilator uznaje ją za double, w przypadku nadania wartości zmiennej 'a' Visual rzucił by warning z tym związany. Ponieważ 3.2 we float i 3.2 w double prawdopodobnie (a wręcz na pewno) różnią się na którymś miejscu po przecinku dlatego pierwszy warunek daje false. W drugim ifie porównujesz wartości float i dlatego są one równe. Związane jest to z reprezentacją liczb zmiennoprzecinkowych ;)

1

a jaki jest sens takiego zapisu float a = 1.2f ? ma to jakiś sens ?

Sens jest taki, że mówisz kompilatorowi, że chcesz wartość 1.2 jako float. Bez tego kompilator uznaje, że chcesz wartość 1.2 jako double, a potem przy przypisaniu do float zrobi rzutowanie tracąc na precyzji. Przy okazji rzuci warningiem żeby nie było, że nie dba o programistę.

Niezależnie od tego, czy to jest float czy double, nie powinno się sprawdzać równości za pomocą ==, z powodu niedokładności zapisu. Zazwyczaj się przyjmuje pewien zakres i jeśli różnica 2 liczb jest w tym zakresie to się je uznaje za równe.

0

dobra już rozumiem w ifie należy dać 1.2f aby kompilator wiedział, że chodzi o zmienną float.

A mógłby jeszcze ktoś objaśnić jak mam 2.3f w printf to liczbe float zaokrągli do 3 miejsca po przecinku i wypisze 2 maksymalnie cyfry z lewej strony ?

0

2.3f zadziała dokładnie jako 3.3 i 4.3.
%6.3f - wypisze z 3 znakami po przecinku całość dobije spacjami z lewej do 6 znaków (2 z lewej).

1 użytkowników online, w tym zalogowanych: 0, gości: 1