Typ danych używany przy wypisywaniu do strumieniu wyjścia
Ostatnio zmodyfikowano 2016-05-27 17:58
erde Temat założony przez niniejszego użytkownika |
Typ danych używany przy wypisywaniu do strumieniu wyjścia » 2016-05-27 17:50:16 Witam serdecznie, ucząc się podstaw natknąłem się na coś czego nie rozumiem do końca. Program ma wypisać objętość kuli na ekran. int main() { float r = 1; cout << "Objetosc kuli to: " << M_PI * pow( r, 3 ) * 4 / 3 << endl; } Kiedy kod wygląda tak to wszystko jest wporządku, otrzymuje w konsoli wartość prawidłową; float r = 1; cout << "Objetosc kuli to: " << M_PI * pow( r, 3 ) *( 4 / 3 ) << endl; Jeżeli ujmę wartość 4/3 w nawias wartość ta zostaje zaokrąglona do 1 i otrzymuje wynik nieprawidłowy. int main() { cout << 4 / 3; } Wypisanie w ten sposób samego ułamka również zaokrągla wynik. int main() { cout <<( double ) 4 / 3; } Rzutowanie w stylu C daje oczekiwany rezultat. int main() { float r = 1; cout << "Objetosc kuli to: " << 4 / 3 * M_PI * pow( r, 3 ) << endl; } Tak kod wyglądał na samym początku, chociaż forma zapisu ułamka jest taka sama to umieszczenie jej na początku również zaokrągla mój wynik. Czy ma to związek z kolejnością wykonywania operatorów? Bo już się pogubiłem. Problem doraźnie jak widać jakoś rozwiązałem chociaż chwile zajęło mi zrozumienie czemu moje obliczenie objętości nie działa. Chciałbym natomiast dowiedzieć się jaka jest natura tego zjawiska, bo wychodzi na to że czegoś tu dokładnie nie rozumiem. Zdaje sobie sprawę że problem trywialny więc proszę o wyrozumiałość. Pozdrawiam serdecznie i z góry dziękuje za pomoc |
|
carlosmay |
» 2016-05-27 17:58:51 ( 4 / 3.0 ) Jeden z operandów musi być typu zmiennoprzecikowego. W tym wypadku double . Edit: Chciałbym natomiast dowiedzieć się jaka jest natura tego zjawiska, bo wychodzi na to że czegoś tu dokładnie nie rozumiem. |
Dzielnie dwóch liczb całkowitych promuje wynik do liczby całkowitej, odrzucając część ułamkową (zaokroglanie w dół). |
|
« 1 » |