Kurs programowania w C cz. 143

Nasza ocena:

5
Wyświetleń: 616
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz. 143 - strona 1

Fragment notatki:

162 ROZDZIAŁ 22. ZAAWANSOWANE OPERACJE MATEMATYCZNE Prezentacja liczb rzeczywistych w pamięci komputera Być może ten temat może wydać Ci się niepotrzebnym, lecz w wielu książkach nie ma w ogóle tego tematu. Dzięki niemu zrozumiesz, jak komputer radzi sobie z przecinkiem oraz dlaczego niektóre obliczenia dają niezbyt dokładne wyniki. Na początek trochę teorii: do przechowywania liczb rzeczywistych przeznaczone są 3 typy: float, double oraz long double. Zajmują one odpowiednio 32, 64 oraz 80 bitów. Wiemy też, że komputer nie ma fizycznej możliwości zapisania przecinka. Spróbujmy teraz zapisać jakąś liczbę wymierną w formie liczb binarnych. Nasza liczba to powiedzmy 4.25. Spróbujmy ją rozbić na sumę potęg dwójki: 4 = 1*2 2 + 0*21+0*20. Dobra — rozpisaliśmy liczbę 4, ale co z częścią dziesiętną? Skorzystajmy z zasad matematyki — 0.25 = 2 − 2. Zatem nasza liczba powinna wyglądać tak: 100.01 Ponieważ komputer nie jest w stanie przechować pozycji przecinka, ktoś wpadł na prosty ale sprytny pomysł ustawienia przecinka jak najbliżej początku liczby i tylko mnożenia jej przez odpowiednią potęgę dwójki. Taki sposób przechowywania liczb nazywamy  zmienno- przecinkowym , a proces przekształcania naszej liczby z postaci czytelnej przez człowieka na format zmiennoprzecinkowy nazywamy  normalizacją . Wróćmy do naszej liczby — 4.25. W postaci binarnej wygląda ona tak: 100.01, natomiast po normalizacji będzie wyglądała tak: 1.0001*2 2. W ten sposób w pamięci komputera znajdą się dwie informacje: liczba zakodowana w pamięci z “wirtualnym” przecinkiem oraz numer potęgi dwójki. Te dwie informacje wystar- czają do przechowania wartości liczby. Jednak pojawia się inny problem — co się stanie, jeśli np. będziemy chcieli przełożyć liczbę typu 1 3 ? Otóż tutaj wychodzą na wierzch pewne nie- dociągnięcia komputera w dziedzinie samej matematyki. 1/3 daje w rozwinięciu dziesiętnym 0.(3). Jak zatem zapisać taką liczbę? Otóż nie możemy przechować całego jej rozwinięcia (wynika to z ograniczeń typu danych — ma on niestety skończoną liczbę bitów). Dlatego przechowuje się tylko pewne przybliżenie liczby. Jest ono tym bardziej dokładne im dany typ ma więcej bitów. Zatem do obliczeń wymagających dokładnych danych powinniśmy użyć typu double lub long double. Na szczęście w większości przeciętnych programów tego typu problemy zwykle nie występują. A ponieważ początkujący programista nie odpowiada za two- rzenie programów sterujących np. lotem statku kosmicznego, więc drobne przekłamania na

(…)

… sterujących np. lotem statku kosmicznego, więc drobne przekłamania na
odległych miejscach po przecinku nie stanowią większego problemu.
Liczby zespolone
Operacje na liczbach zespolonych są częścią uaktualnionego standardu języka
C o nazwie C99, który jest obsługiwany jedynie przez część kompilatorów
Podane tutaj informacje zostały sprawdzone na systemie Gentoo Linux z biblioteką GNU
libc w wersji 2.3.5…
... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz