W Symfonii C++ z 2006 roku jest opisana funkcja inline. Mam trochę inne pytanie. Na wstępie jest pokazana taka oto funkcja służąca do zaokrąglania (nie wiem tylko po co jest tam to + 0.5 ):
int zao(double liczba)
{
return (liczba + 0.5);
}
Później jest fragment:
Czy ktoś mógłby mi wytłumaczyć o co chodzi z tym algorytmem (dokładnie i w miarę zrozumiale) jak i z tą pierwszą linijką :?: W tej pierwszej nie powinno być po prostu np.:
double x;
cin >> x;
zao(x); // teraz otrzymujemy zaokrągloną liczbę - jeśli wpisalibyśmy np. 9.4 to 9.4 + 0.5 = 9.9 = 9
Nie rozumiem o co w tym chodzi. Aha i dziwne jest to co jest na początku tych wyrażeń - to jest albo mała literka l albo 1, ale z tego co porównywałem ze znakami z książki to jest po prostu literka (mała) l - czyli pewnie jakaś zmienna…
Z góry wielkie dzięki za wytłumaczenie działania tych 2 wyrażeń
Przy konwersji z double na int brana jest pod uwagę tylko część przed przecinkiem dziesiętnym, reszta jest ucinana. Więc jeśli masz 2.7 to po konwersji do int dostaniesz 2 (więc jest to “ucinanie”, a nie zaokrąglanie). Dlatego dodaje się do pierwotnej liczby 0.5, aby dla wartości po przecinku większych bądź równych od 0.5 otrzymać wartość przed przecinkiem zwiększoną o 1. Np. int(2.2 + 0.5) == 2, czyli dobrze zaokrąglone 2.2, a int( 2.5 + 0.5) == 3, czyli dobrze zaokrąglone 2.5. Mam nadzieje, że jasno wytłumaczone.
OK dzięki już rozumiem mniej więcej. A teraz odnośnie tego 1 - szego wyrażenia - czego jest akurat tak, jak jak tam pisze, a nie po prostu tak jak ja napisałem ? ;/ Już nawet się nie pytam o 3 - cie bo mi to niepotrzebne…
[alex], popatrz na pierwszy kod w moim 1 - szym poście. To jest funkcja do zaokrąglania podanej liczby. W cytacie jest napisane, że można tą funkcję wywołać tak:
zao(m) + zao(n * 16.7);
I nie wiem po prostu co robi to zao(n * 16.7). Czemu nie mogło by być tak jak ja napisałem:
double x;
cin >> x;
zao(x); // teraz otrzymujemy zaokrągloną liczbę - jeśli wpisalibyśmy np. 9.4 to 9.4 + 0.5 = 9.9 = 9
Mam nadzieję, że już jest jasne to… EDIT: Mały błąd się tam wkradł. Powinno być coś takiego:
double x;
cin >> x;
m = zao(x); // teraz otrzymujemy zaokrągloną liczbę - jeśli wpisalibyśmy np. 9.4 to 9.4 + 0.5 = 9.9 = 9
cout << m;