Krever Posted September 11, 2009 Report Share Posted September 11, 2009 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 to comment Share on other sites More sharing options...
Toster Posted September 11, 2009 Report Share Posted September 11, 2009 sproboj t1 =( (float)s)/a Always Dark<br /> Link to comment Share on other sites More sharing options...
Jason Posted September 11, 2009 Report Share Posted September 11, 2009 sproboj t1 =( (float)s)/a A nie prościej 1.0/2 ? Rzutowanie ustawia się domyślnie do pierwszej liczby. Link to comment Share on other sites More sharing options...
Toster Posted September 11, 2009 Report Share Posted September 11, 2009 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 /> Link to comment Share on other sites More sharing options...
Jason Posted September 11, 2009 Report Share Posted September 11, 2009 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 to comment Share on other sites More sharing options...
tr!ckle Posted November 17, 2009 Report Share Posted November 17, 2009 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.