Krever Napisano Wrzesień 11, 2009 Zgłoś Share Napisano Wrzesień 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 do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Wrzesień 11, 2009 Zgłoś Share Napisano Wrzesień 11, 2009 sproboj t1 =( (float)s)/a Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Wrzesień 11, 2009 Zgłoś Share Napisano Wrzesień 11, 2009 sproboj t1 =( (float)s)/a A nie prościej 1.0/2 ? Rzutowanie ustawia się domyślnie do pierwszej liczby. Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Wrzesień 11, 2009 Zgłoś Share Napisano Wrzesień 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 do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Wrzesień 11, 2009 Zgłoś Share Napisano Wrzesień 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 do komentarza Udostępnij na innych stronach More sharing options...
tr!ckle Napisano Listopad 17, 2009 Zgłoś Share Napisano Listopad 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 do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.