Staralem sie tylko wyjasnic ze problemy z zapisem okreslonych liczb bez uzycia ulamkow to problem w kazdym systemie liczbowym i w kazdym predzej czy pozniej trzeba zaokraglac
ty policzyles to ulamkami, gdybym kazal Ci zapisac wynik 1/3 jako liczba po przecinku to tez popelnisz blad bo nie wpiszesz nigdzie nieskonczenie wiele trójek po przecinku, ratuje Cie tylko wiedza o tym ktore miejsce po przecinku jest istotne.
Grubo. Ciekawe czy po wykryciu usterki wiedziano dokładnie jak czas działania systemu wpływał na niedokładność śledzenia rakiet? A jeżeli tak to czemu do czasu wydania i rozpropagowania łatki nie przesłano rozkazu natychmiastowego i częstszego restartu systemów by zachować względną zdolność baterii do obrony śledzonego obszaru?
@avoner: Nie no. Dwa tygodnie to i tak ekspres, ale do czasu jej dostarczenia (jeżeli mieli wiedzę o skutkach liczenia czasu) to powinni wydać rozkaz restartów ręcznych systemu co godzinę albo ciut rzadziej dla zachowania akceptowalnej celności.
@gugulec to nie jest tak, że CPU czegoś nie lubi. On tylko liczy to, co każe się mu policzyć i tu żadnych błędów nie popełnia. Jeśli programator nie jest świadom ograniczeń binarnej reprezentacji zastosowanego systemu liczbowego, to nie uniknie związanych z tym fuckupów.
Z liczbami ujemnymi jest trochę inaczej niż na filmie. Przedstawiona tam konwencja jest intuicyjna dla ludzi i jak ktoś chce, to może jej używać, ale jest niepraktyczna. W praktyce używa się tzw. kodu uzupełnień do dwóch. Tam też jedynka na skrajnej lewej pozycji (tzw. najstarszy bit) sygnalizuje liczbę ujemną, ale ogólna zasada jest inna. Otóż żeby zapisać wartość ujemną, zapisujemy taką wartość jaka brakuje do 2ⁿ, gdzie n to liczba bitów. Jeśli
błędy spowodowane niedokładnością liczb zmiennoprzecinkowych są dość częste w grach, ale zazwyczaj dotyczy to nie czasu, ale współrzędnych. Po oddaleniu się odpowiednio daleko od miejsca gdzie gracz powinien się znajdować fizyka gry zaczyna świrować. Jak znacie jakąś grę która pozwala wyjść za mapę i przemieszkać się bez ograniczeń w jednym kierunku, to warto spróbować, efekty bywają ciekawe.
Częste są też przepełnienia liczba całkowitych, gdzie odpowienio duża liczba może przekręcić się na dużą
@dodd: Gandhi w cywilizacji miał agresję ustawioną na 0. A po wynalezieniu demokracji agresja zmniejszała się, i cyk, przepełnienie bo zmienna była całkowita nieujemna i nagle Gandhi rzuca atomówkami na prawo i lewo.
@smith78: w Half-life 2 chodząc/strafe'ując do tyłu i ciagle skacząc, można osiągnąć niesamowite prędkości. Mądrzejsi odemnie ustalili, że polega to na zliczaniu przebytej odległości przez silnik gry w ciągu jednej sekundy (jednego fps).
Działa to na zasadzie zaokrąglenia otrzymanych wartości współżędnych przy zliczaniu tickrate'ów. Następnie silnik gry próbuje przewidzieć pozycję gracza, na podstawie otrzymanych wyników... a przynajmniej tak to zrozumiałem.
Błąd ten odkryto, bo twórcy nie myśleli, że ktoś faktycznie będzie
Pracuje w systemach central telekomunikacyjnych i kiedyś znaleźliśmy na szczęście na czas podobny błąd w naszym oprogramowaniu.
Przyczyną był błąd który ktoś popełnił przy rzutowaniu zmiennej całkowitoliczbowej przez co rejestr się przekręcał i zegar zaczynał chodzić od zera. Nie był to byle jaki zegar tylko tzw. RFN (Reference Frame Number), czyli licznik centrali RNC który monotonicznie jest inkrementowany o 1 co 10ms. Wartość RFN jest porównywana przez centralę z podobnymi zegarem zwanym
Ciekawostka: debile, którzy tworzyli system ticketowy redmine, wpadli na genialny pomysł liczenia czasu na floatach. W związku z tym, gdy wpiszę się za dużo krótkich odcinków czasu dla zadania, np. po 5 lub 10 minut, to łączny czas czasami nie zgadza się na plus lub minus kilka minut, przez co w robocie jak sprawdzam, czy wpisałem 8 godzin, to mam czasem 7:59, albo 8:02.
Komentarze (90)
najlepsze
Staralem sie tylko wyjasnic ze problemy z zapisem okreslonych liczb bez uzycia ulamkow to problem w kazdym systemie liczbowym i w kazdym predzej czy pozniej trzeba zaokraglac
ty policzyles to ulamkami, gdybym kazal Ci zapisac wynik 1/3 jako liczba po przecinku to tez popelnisz blad bo nie wpiszesz nigdzie nieskonczenie wiele trójek po przecinku, ratuje Cie tylko wiedza o tym ktore miejsce po przecinku jest istotne.
Temat walkowany wielokrotnie.
Ja średnio raz na miesiąc rzygam bo globalna instytucja finansowa nie ogarnia stref czasowych ( ͡° ʖ̯ ͡°)
@pkusmierczyk: i dodaje ci coś do pożywienia?
Częste są też przepełnienia liczba całkowitych, gdzie odpowienio duża liczba może przekręcić się na dużą
A po wynalezieniu demokracji agresja zmniejszała się, i cyk, przepełnienie bo zmienna była całkowita nieujemna i nagle Gandhi rzuca atomówkami na prawo i lewo.
w Half-life 2 chodząc/strafe'ując do tyłu i ciagle skacząc, można osiągnąć niesamowite prędkości.
Mądrzejsi odemnie ustalili, że polega to na zliczaniu przebytej odległości przez silnik gry w ciągu jednej sekundy (jednego fps).
Działa to na zasadzie zaokrąglenia otrzymanych wartości współżędnych przy zliczaniu tickrate'ów. Następnie silnik gry próbuje przewidzieć pozycję gracza, na podstawie otrzymanych wyników... a przynajmniej tak to zrozumiałem.
Błąd ten odkryto, bo twórcy nie myśleli, że ktoś faktycznie będzie
Przyczyną był błąd który ktoś popełnił przy rzutowaniu zmiennej całkowitoliczbowej przez co rejestr się przekręcał i zegar zaczynał chodzić od zera. Nie był to byle jaki zegar tylko tzw. RFN (Reference Frame Number), czyli licznik centrali RNC który monotonicznie jest inkrementowany o 1 co 10ms. Wartość RFN jest porównywana przez centralę z podobnymi zegarem zwanym