Otrzymałem po raz kolejny wiadomość z tekstem: „[…] kontrolujący stwierdził, że program liczy źle […]”. Szczerze pisząc, to nie za bardzo daję wiarę temu, że „Kontrolujący” mógł to stwierdzić – raczej zauważam (z bardzo drobnymi wyjątkami) od kilku lat po stronie uprawnionych do kontrolowania postawy zgoła odmienne.
Przypadek tym razem opisywany był podobno następujący: osiem wartości policzonych struktur zatrudnienia za osiem kolejnych miesięcy wynosiła odpowiednio 0,47; 1,00; 0,65; 1,00; 0,88; 0,93; 0,99; 1,00. „Program” (czyli zalecana tu Aplikacja na poziomie obliczeń realizowanych w pliku analizatora oraz na poziomie raportowania obliczeń) „wylicza średnią z tych ośmiu miesięcy równą 0,86”; „[…] kontrolujący natomiast stwierdza, że poprawny wynik obliczenia średniej jest równy 0,87 […]”; „[…] faktycznie […] jak obliczam średnią kalkulatorem to wychodzi 0,865, czyli po koniecznym zaokrągleniu do dwóch miejsc po przecinku daje to 0,87 […]”; „Czy program działa poprawnie?”.
Tak, zdecydowanie tak – program, (aplikacja, narzędzie,…) działa poprawnie!
W miarę rozpowszechniania się i upowszechniania się proponowanych tu narzędzi wspomagania przeprowadzania analizy wydatków poniesionych na wynagrodzenia nauczycieli użytkownicy „odkrywali” coraz więcej niuansów konsekwencji obowiązywania art. 30a ustawy Karta Nauczyciela (i właściwych tu przepisów wykonawczych) – istotnie jest ich bardzo wiele o różnym poziomie komplikacji i znaczenia. Z „lektury” wniosków pokontrolnych wynika obecnie, że Kontrolujący są w zdecydowanej większości już świadomi ich istnienia i pewnie dlatego są – chyba pisać tak należy – mocno tolerancyjni, ostrożni i z odpowiednim dystansem podchodzą do przedmiotu kontroli wynikającego z art. 30a ustawy Karta Nauczyciela.
W rozporządzeniu (w sprawie sposobu opracowywania sprawozdania […]) w części nazwanej „Objaśnienia” w punkcie oznaczonym „I” wprowadzono zapis: "Wszystkie dane oraz wyniki obliczeń powinny być wpisane z dokładnością do dwóch miejsc po przecinku. Obliczenia powinny zostać wykonane na danych z taką samą dokładnością.”. Pomijam tu fakt użycia zwrotu „powinny”, czyli nie koniecznie chyba „muszą”. „Niefortunność” i „niefrasobliwość” zaistnienia tego zapisu (już od dawna znana i opisana), co do treści jak i co do formy, wymaga z pewnością osobnego i właściwego opracowywania wciąż na nowo i powtarzania (widać ciągle chyba jeszcze zbyt mało o tym napisano), które to opracowania w streszczeniu będą zawsze mieć takie brzmienie: „Takie zapisy i w takiej formie nie powinny mieć miejsca w naszym prawie, ale… mają!”. W powiązaniu z całością algorytmu dokonywania analizy wydatków poniesionych na wynagrodzenia nauczycieli wpisanego w przepisy prawa rodzi to bardzo wiele szczegółowych problemów – no ale trzeba sobie z nimi jakoś radzić...
Co więc zastosowano w proponowanych narzędziach w celu minimalizowania negatywnych skutków wskazanego wyżej „przepisu”? Czyli dlaczego jednak w podanym wyżej przykładzie rzecz jest policzona poprawnie?
W miejscach wymagających zaokrąglania nie zastosowano algorytmu standardowego (szkolnego), w którym „połówki” (piątki) zaokrąglane są zawsze w górę, czyli takiego, że np. 2,345 zostaje zaokrąglone do 2,35; 10,885 do 10,89 itp. Czyli nie zastosowano takiego działania, jakiego nauczyliśmy się w szkole i jakiego oczekiwałaby większość z nas (także pewnie uprawnionych do kontrolowania – szkoła już od dawna w wielu kwestiach przestała być miarą właściwą). Jednak w analizie wydatków poniesionych na wynagrodzenia nauczycieli (a to nie są odosobnione pojedyncze obliczenia) takie działanie (zaokrąglanie „połówek” zawsze w górę) prowadzi do kumulowania błędów. Na przykład (przykład jest trywialny, ale wystarczająco wyjaśnia problem) suma dwóch liczb 2,225 i 6,655 jest równa 8,88. W wyniku zastosowania ewentualnego zaokrąglania do dwóch miejsc po przecinku (tu jednak szkolnego): 2,23+6,66=8,89 („błąd” właśnie został „skumulowany”). W zalecanych tu narzędziach obliczeniowych zastosowano algorytm zwany gaussowskim lub bankierskim. „Połówki” zaokrąglane tu są zawsze „do najbliższej liczby parzystej”. Dlatego 2,225 zaokrąglone zostanie do 2,22; a 6,655 do 6,66. Wówczas po takim zaokrągleniu: 2,22+6,66=8,88 („błąd” został „zamortyzowany”).
Czyli 0,865 zostaje w zalecanej aplikacji zaokrąglone do 0,86!
Głębsza analiza tego zagadnienia w odniesieniu do analizy wydatków na wynagrodzenia nauczycieli każe zdecydowanie stosować algorytm gaussowski (bankierski). Dodatkowo należy zauważyć, że przepis prawa nie stanowi o sposobie czynienia zaokrąglania, lecz jedynie o potrzebie stosowania „dokładności do dwóch miejsc po przecinku”. Co do zasady, należy więc wybrać taki sposób liczenia, który będzie prowadził do możliwie najpoprawniejszych wyników i najmniejszych błędów.
Czy algorytm bankierski (gaussowski) jest zły? To nie jest właściwe pytanie...
Zastosowanie takiego algorytmu nie jest niczym niezwykłym, a tym bardziej złym. To, że nie jest nauczany powszechnie w szkołach nie stanowi tu żadnego argumentu. W zależności od zastosowań ma ten algorytm swoje poważne zalety, które zdecydowanie ujawniają się właśnie w analizie wydatków poniesionych na wynagrodzenia nauczycieli. Zaokrąglanie standardowe (szkolne; „połówki” zawsze w górę) powoduje kumulowanie błędu (cokolwiek by to znaczyło) w przypadku wykonywania późniejszych operacji arytmetycznych na dużych zbiorach danych. Algorytm bankierski (gaussowski) sprawia, że otrzymana np. suma (lub efekt innego działania na dużych zbiorach danych) jest o wiele bliższa sumie „oryginalnej”.
Znam wielu, którzy tego nie rozumieją lub zrozumieć nie chcą – z tym jak sobie radzić, to nie wiem.
Krzysztof Sługocki, 30.10.2019 |