Przejdź do głównej zawartości

Zaokrąglanie liczb rzeczywistych do całkowitych


  W niektórych zadaniach wymagane jest zaokrąglanie liczb rzeczywistych. Ogólnie polega ono na tym by  przekształcić liczbę rzeczywistą w całkowitą (czasem to ta sama wartość np. 2.0). Najczęściej wybieranymi zaokrągleniami są:
  • zaokrąglenie w stronę zera,
  • zaokrąglenie do najbliższej wartości.
   Pierwsze z nich można opisać jako usunięcie części ułamkowej liczby np. liczba 3,14 po zaokrągleniu tą metodą stanie się 3, dla -3,14 otrzymamy -3, po zaokrągleniu tą metodą 3,75 otrzymamy 3. 
   Tę metodę zaokrąglania można zrealizować za pomocą rzutowania np. 

a = (int) a;

   Druga ze wspomnianych metod służy do wyznaczania liczby całkowitej najbliższej przetwarzanej wartości rzeczywistej np. dla 3,14 otrzymamy 3, a dla 3,75 dostaniemy 4. Dla liczb ujemnych analogicznie dla -3,14 otrzymamy -3 a  dla -3,75 dostaniemy -4. W procesie implementacji tej metody pomocne znów okaże się rzutowanie. Tym razem nie obędzie się bez dodatkowych działań. 
   Musimy sprawdzić czy dana wartość jest dodatnia czy ujemna. Jeżeli stwierdzimy, że mamy do czynienia z liczbą dodatnią to dodajemy do niej 0,5. Jeżeli wartość przetwarzanej liczby jest bliższa wyższej wartości całkowitej to po dodaniu 0,5 przekroczy tę liczbę np. 3,75 + 0,5 = 4,25. Otrzymaną wartość rzutujemy na typ całkowity. Pozbywamy się w ten sposób części ułamkowej. Podobnie postępujemy dla wartości ujemnych. Dla liczb ujemnych należy odjąć wartość 0,5 np. -3,75 - 0,5 = -4,25 i następnie rzutować otrzymaną wartość na typ całkowity.
Przykłady realizacji zaokrąglenia do najbliższej wartości:
if(a > 0)
    a = int(a + 0.5);
else
    a = int(a - 0.5);
lub krócej

 a = (int)(a + (a>0?0.5:-0.5));



Innymi typami zaokrągleń są (http://pl.wikipedia.org/wiki/Zaokr%C4%85glanie):
  • zaokrąglanie w dół - otrzymujemy największą liczbę całkowitą, której wartość nie przekracza przetwarzana liczba rzeczywista.
  • zaokrąglanie w górę - otrzymujemy najmniejszą liczbę całkowitą, której wartość jest nie mniejsza od przetwarzanej liczby rzeczywistej..
  • zaokrąglanie w kierunku od zera - otrzymujemy liczbę całkowitą najbliższą zeru dla której przetwarzana wartość rzeczywista znajduje się pomiędzy nią i zerem.

Popularne posty z tego bloga

[C++]Konwersja systemu dziesiętnego na binarny [dec2bin, dec2u2]

Konwersja między systemami liczbowymi była już poruszana w tym serwisie tym razem zajmę się kodem U2. Inaczej zwany uzupełnieniem do 2. Opis tego systemu pojawił się w kontekście wstępu do programowania w języku Python [ tutaj ]. Prosty program tzw. szkolny zamiany nieujemnej liczby dziesiętnej na jej postać binarną: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <iostream> using namespace std; int main () { int liczba; cin >> liczba; string wynik; while (liczba){ wynik = (liczba % 2 ? "1" : "0" ) + wynik; liczba /= 2 ; } cout << wynik; return 0 ; } Poniżej prezentuję kod programu, który zawiera trzy metody rozwiązania problemu jakim jest wyświetlenie użytkownikowi reprezentacji u2 podanej przez niego liczby dziesiętnej. Pierwsza z nich wywodzi się z typowego algorytmu konwersji systemu dec do u2: 1. przedstaw bezwzględną wartość liczby dziesiętnej w postaci binarnej, 2. dodaj na początek

Python - lekcja 005

Spis treści - zamiana całkowitych liczb dziesiętnych na ich odpowiedniki w innych systemach liczbowych (algorytm), - ujemne liczby całkowite w systemie binarnym (ZM, U1, U2, algorytm, formatowanie stringów, rzutowanie ze zmianą systemu liczbowego) [dec2bin, dec2ZM, dec2U1, dec2U2] - zadania.