Composer to narzędzie służące do zarządzania zależnościami w projekcie w PHP. Mówiąc (zbyt?) prosto: służy do ściągania zewnętrznych bibliotek do projektu i pomaga zarządzać ich wersjami.
Read moreCategory: programowanie
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
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
IDE taty programisty
Zaczynając programować, na samym wstępie, przed napisaniem pierwszej linijki kodu, musisz wybrać program, w którym tenże kod napiszesz. Opowiem Ci dzisiaj o narzędziach, których sam używam do programowania.
Read more
HTML – całkiem (nie)nudny wstęp
Z której by strony nie podchodzić do tematyki webu, zawsze fundamentem jest znajomość HTML.
Chciałbym przybliżyć Ci historię oraz bardzo akademicko omówić, czym jest HTML. Jestem pewien, że taka wiedza znacząco ułatwia pisanie semantycznego, czyli językowo poprawnego kodu. HTML sam w sobie nie jest zbyt skomplikowany, tym więc milej. Read more
PHP: przechwytywanie wyjątków
#jedenasta37 Kiedy dane walidujemy i obsługujemy, a kiedy rzucamy wyjątkiem? Czy wyjątek to rzecz normalna, czy wkurw ostateczny? I co ma z tym wspólnego kasza manna?
Systemy liczbowe
#jedenasta37
Trochę zabierałem się do tego artykułu jak do jeża, czuje się głupi, gdy widzę skomplikowane wzory matematyczne, które zostawiają w głowie tylko jedno wielkie WTF. Ale cóż popełniło się artykuł o błędzie zaokrąglania, to teraz trzeba wytłumaczyć dlaczego ten błąd się pojawił 🙂
Zapraszam na nowy cykl artykułów z serii „Podstawy informatyki i kawa”.
Wpis z dedykacją dla Madzi J
PHP: rzucanie wyjątków
#jedenasta37 Jak działają wyjątki w PHPie? Rzuca się je, przechwytuje, obsługuje, co to w ogóle znaczy? To po kolei!
Read more
JS async
#jedenasta37 Dzisiaj będzie o największej nowości ES8, czyli o funkcjach asynchronicznych. Jest to artykuł dla ciut bardziej zaawansowanych programistów JavaScript, potrzebujesz ogólnie mieć pojęcie czym jest callback, oraz promise.
Read more