Skocz do zawartości

[c++] liczby zmiennoprzecinkowe i cout


Krever

Polecane posty

Standardowy strumien cout buntuje mi sie przed wyswietlaniem liczb zmiennoprzecinkowych, np. :

 

bez problemu działa:

cout << 0.5;

 

ale juz gdy wpisze

cout <<1/2;

wyswietlane zostaje 0. Kompilator jak gdyby samoistnie dokonuje konwersji na typ int.

 

Uzywam VS `08 Express Edition.

 

O to program do liczenia sredniej predkosci w ktory napotkalem problem.

 

#include <iostream>
using namespace std;

int main()
{
       int s=1,vsr,a,b,t;
       float t1,t2,tr;
       cin >> t; /* wczytaj liczbę testów */
       while(t){ 
       cin >> a;
       cin >> b;
       t1=s/a;
       t2=s/b;
       tr=t1+t2;
       vsr=(2*s)/tr;
       cout << vsr << endl;
   t--;
       } 

}

 

Bardzo mozliwe ze to jakies podstawy o ktorych zapomnialem, tak bywa jak sie nie pisze nic od dluzszego czasu(przynajmniej u mnie).

Link do komentarza
Udostępnij na innych stronach

jeszcze prosciej wpisac t=0.5 tyle ze w kodzie powyzej ja widze zmienne wczytywane z konsoli.

Co prawda nie jestem pewien bo w c++ dawno nie pisalem ale chyba

float t = 1.0/2 jest rowne rzutowaniu z double na floata, niech mnie ktos poprawi jesli sie myle ale jesli juz to powinno byc

float t = 1.0f/2

 

Zaciekawilo mnie za to ostatnie zdanie, co to znaczy ze "rzutowanie ustawia się domyślnie do pierwszej liczby" ?

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Heh, napisało mi się tak... Raczej powinienem był napisać że zależy od liczb użytych w działaniu;

 

        cout << 1./2 << endl;
       cout << 1/2. << endl;
       cout << 0.5 << endl;
       cout << 1.f/2 << endl;
       cout << 1/2.f << endl;
       cout << 0.5f << endl;
       cout << 1/2 << endl;

Tylko ostatnie zwróci 0, przynajmniej w GCC ;)

Link do komentarza
Udostępnij na innych stronach

  • 2 months later...

ponadto skoro dzielisz przez siebie dwa inty (np. s/a jak w twoim przykladzie) to chyba nie dziwne ze masz dzielenie calkowito-liczbowe? I chyba nie powinno się stosować rzutowania w stylu c (ot taki dobry zwyczaj którego się lepiej stosować, bo może inaczej możesz mieć kłopoty z kodem w przyszłości ;])

ustaw s, a, b i vsr na float to bez problemu ci podzieli.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...