Liczby zmiennoprzecinkowe

Notacja zmiennoprzecinkowa – tutaj trzeba już czarować

Teraz będzie trudniej. Z drugiej strony jeśli zrozumiałaś już notacje inżynierską, to będzie po prostu kolejny krok w Twojej podróży do bycia dobrym developerem.

Na początek definicja

Liczba zmiennoprzecinkowa to zapis naukowy, liczby rzeczywistej. Obliczany według wzoru

x = SM * BE
S znak (en sign)
M mantysa (en mantissa),
B baza(en base), czyli baza systemu liczbowego, bo przecież możemy chcieć użyć tego zapisu i dla liczby dziesiętnej, i heksadecymalnej i binarnej (tutaj więcej o systemach liczbowych)
E wykładnik, cecha (exponent)

Wzór jest dokładnie taki sam jak w wypadku notacji naukowej. Jest tylko jedno małe ale, liczba rzeczywista może być niewymierna (czyli nie da się jej zapisać np 1/3 to 0.3333(3) )
Dlatego zarówno mantysa i baza mają określony rozmiar. Czytaj  na znak + lub – mamy jedno miejsce, mantysa i cecha muszą też zmieścić się w ograniczonej ilości znaków. Jak się nie zmieści, zostanie po prostu ucięta – jakbyś garnek rosołu wlewał do talerza – co się zmienić, to będzie w talerzu, co się nie zmieści, stracone. Ucinając „wystające” znaki mantysy czy cechy, tracimy precyzję.
Więc

Avada Kedavra Końcóweczki!

 

Zobaczmy to w działaniu!

Zadanie jest proste (mam nadzieje). Musimy zapisać liczbę w systemie dziesiętnym (nasze B = 10), mając na to  ściśle określona liczbę znaków :
1 miejsce na znak (+ lub -)
4 miejsc na mantyse
2 miejsca na wykładnik. plus jeden na znak wykładnika

Np zapiszmy liczbę  1023 w takich założeniach

S = + bo mamy liczbę dodatnią
M = 1023 bo mamy miejsce na 4 znaki
E = 0

+1023E+0

Ale

Np zapiszmy liczbę  -0,0000001023 w takich założeniach

S = – bo mamy liczbę dodatnią
M = 1023 bo mamy miejsce na 4 znaki
E = -10

+1023 E-10
Czyli możemy zapisać naprawdę małe liczby!

Niestety   notacja zmiennoprzecinkowa nie jest idealna.
Problem  pierwszy, polega na nieprecyzyjności zapisu (gubimy końcówki)

zapiszmy liczbę  -0,00000010234 w takich założeniach

S = – bo mamy liczbę dodatnią
M = 1023 bo mamy miejsce na 4 znaki
E = -10

Zgubiliśmy końcówkę liczby! mantysa to  już nie 10234 a tylko 1023
To bardzo źle ponieważ np operacja dodawania straciła łączność. Czyli używając notacji liczby rzeczywistej, wynik będzie różny w zależności od kolejności dodawania. Np
jeżeli wynikiem dodawania a + b + c  jest d to a + c + b już nie musi dać d!
Taki przykład na liczbach: 0,1+0,3+0,2 może dać 0,6000001) a nie samo 0,6 jak się spodziewaliśmy, a np 0,3+0,2 + 0.1

Kolejną wadą  notacji zmiennoprzecinkowej, jest  to problem podwójnego zera.
Jak to możliwe? A no zapis +0 i zapis -0 to dwie różne liczby. Komputer patrzy na
1000000 i 0000000 to mu się nie zgadza.

Dlatego trzeba sobie jakoś z tym radzić. I jest kilka standardów która można wybrać Każdy ma swoje wady i zalety ale o tym już kiedyś indziej.
Dzisiaj mam nadzieje że chociaż trochę przybliżałem Ci z notacje zmiennoprzecinkową.

Popełniłam błąd: nie skakałam po kamieniach!

Krąży po sieci od pewnego czasu opowieść o tym, jak to pewien nauczyciel – przyjmijmy, że to ta wersja z nauczycielem – kazał uczniom wsypać piasek do słoika, potem kazał wsadzić mniejsze kamyczki i na końcu duże kamienie. Oczywiście się nie mieściły. Gdy jednak zaczniemy zapełniać słoik najpierw większymi kamieniami, a potem dopiero dosypujemy żwir, piasek, wlewamy wodę, okazuje się, że wewnątrz słoika jest wszystko. I tak jest z nauką programowania! Read more

Mom & PHP .:. 005 .:. Typy zmiennych

Wiedza obejmująca podstawy danej dziedziny, w tym też programowania, to rzecz fundamentalna: dzięki nim możemy później śmiało iść dalej i bazować na tym, co już za nami. Bazować na, zamiast wstydzić się tego, albo co gorsza, nie wiedzieć nawet, że coś było.

Dzisiaj przedstawiam kolejną część kursu Mom & PHP. Tym razem typy zmiennych, zapraszam!

Dzisiaj zamiast treści w poście, pdf do przejrzenia lub ściągnięcia. Właśnie takie pdfy można dostawać na swoją skrzynkę mailową! Wystarczy zapisać się na kurs – można to zrobić za pomocą tego formularza (pod nim linki do pdfa z kursem).

Tutaj link do PDFa: Mom & PHP .:. 005 .:. Typy plików.

Ten wpis jest częścią ==> Kursu Mom & PHP <==

Zawsze chciej zrozumieć!

..ale nie wieszaj się na tym! To wieszanie się to jest rzecz, która najczęściej zdarza się młodym programistom jako wpadka – nie to, że coś zrobi się źle, albo że można było prościej i wygodniej, nie. To w sumie normalne. Ale to, że zamiast robić, wisisz, że zamiast pracować, czytasz tutki, z których nic nie rozumiesz, że pytasz o zbyt wiele i niepotrzebnie. Bardzo trudno jest tutaj wyważyć jak długo szukać, a kiedy już prosić o pomoc. Przez długi czas mi to wyważenie nie wychodziło. Read more

Mom & PHP .:. 002 .:. Hello World!

Tak się już przyjęło w programistycznym świecie, że programowanie w jakimkolwiek języku zaczyna się od napisania w nim magicznych słów: „Hello World!”. A ja wciąż się waham, jaki powinien być ten nasz pierwszy komunikat: „Kocham Matkę Programistkę!”, „Życie jest piękne!”, „Jakoś to pójdzie”, czy coś może jeszcze bardziej kreatywnego? Read more