@EtaCarinae: Nam pewien doktor na uczelni opowiadał, że w pracach badawczych na siłę próbują autorzy pisać zawile, żeby publikacja wydawała się poważna. Jako przykład podał, że zamiast pisać o wektorach prostopadłych pisze się, że są ortogonalne, bo tak brzmi mądrzej.
Pozostaje tylko podziwiać ludzi, którzy są biegli w najniższym poziomie programowania i bezpośredniej pracy na bitach ;) Ciężko jest to zrozumieć, a co dopiero wpaść na takie rozwiązanie.
@Mave: To jest oldschool... Ludzie w dzisiejszych czasach tego już nie umieją. Nasze komputery mają ogromną moc obliczeniową w porównaniu do tamtych no i praktycznie nieograniczone miejsce na dysku. To wszystko sprawia, że kod wcale nie musi być zoptymalizowany do granic możliwości - co mnie oczywiście bardzo martwi...
Do dopełnienia tej wypowiedzi można by od razu wysunąć argument typu 'koszt'... "Przecież dzięki temu możemy cieszyć się znacznie bardziej rozbudowaną fabułą no
@puaz: Umieją, umieją, komputery to nie tylko PCty służące do grania w najnowsze CoDy, są jeszcze specjalistyczne zastosowania oraz nietypowe jednostki, które też ktoś musi obsługiwać :) Myślę, że programista ogarniający assemblera i tym podobne oldschoolowe sprawy jest bardzo, bardzo ceniony na rynku.
Około roku 2000 podobną, własną metodę iteracyjną opracowaliśmy (moja znikoma rola :) na potrzeby szybkiego obliczania pierwiastka na Amidze, użytego m.in. w tej scenie: https://www.youtube.com/watch?v=XoiHaZoV3XM#t=5m57s Intro działało na procesorze 68020 taktowanym 14Mhz, więc liczył się niemal każdy takt procesora w stosowanym algorytmie! Uświadomię tylko laikom, że renderując w czasie rzeczywistym taką grafikę trzeba rzutować z przestrzeni 3D na ekran 2D każdy element widocznego obiektu i tam się używa pierwiastka jak do obliczania
No proszę. I dlatego właśnie wk%!$iają mnie komentarze nauczycieli/profesorów na studiach że Wikipedia to jeden wielki syf i znakomita większość informacji w niej zawartej to o kant dupy potłuc. Ale żeby przysiąść i wyedytować parę haseł (czym REALNIE przyczyniliby się do wzrostu jakości wyształcenia polskiej młodzieży) to żadnemu się nie chce...
@Morf: no i artykuł na naszej Wiki jest jako jeden z nielicznych.
Ja się jarałem jak przesunięcie bitowe mogłem wykorzystać do wysupłania bitów ze słowa na szybko, a tutaj takie wysoko akademickie pomysły zaciągnięte wprost do praktycznego zastosowania. Chylić czoła, bo i mnie zastanawiało w przeszłości co może stać za tym, że Quake jest po prostu płynny i mega dopracowany pod tym względem. Na pewno takich rzeczy jest tam wiele więcej.
Nie wiem o co biega ale rozumiem że kiedyś zatrudniało się arcymistrzów kodu którzy maksymalnie go optymalizowali. Teraz zatrudnia się kogokolwiek kto ma jakieś pojęcie, a mało zoptymalizowane obliczenia przerzuca się na sprzęt. I dlatego trzeba wymieniać procesory i karty graficzne co 2-3 lata.
@piterek: Z punktu widzenia developera to działa w drugą stronę. Nie możesz marnować czasu na zbyt dokładną optymalizację, bo zanim skończysz to i tak średni sprzęt "z przyszłości" udźwignie wersję pierwotną. Zauważ że dziś tego kodu jest dużo więcej niż 10 lat temu.
Komentarze (119)
najlepsze
-Kto tam?
-Matematyka
-Nie rozumiem...
Do dopełnienia tej wypowiedzi można by od razu wysunąć argument typu 'koszt'... "Przecież dzięki temu możemy cieszyć się znacznie bardziej rozbudowaną fabułą no
1. Pomnóż swoją liczbę X przez magiczne 0.135
2. Do tego dodaj 7.4
3. Podziel przez 2 i zapamiętaj wynik (to jest pierwsze przybliżenie)
4. Podziel pierwiastkowany X przez liczbę uzyskaną w p.3
5. Dodaj do tego liczbę z p.3
6. Podziel przez 2 (to jest drugie przybliżenie)
Tak obliczony pierwiastek wystarczył by
..em, ale wykopię
Ja się jarałem jak przesunięcie bitowe mogłem wykorzystać do wysupłania bitów ze słowa na szybko, a tutaj takie wysoko akademickie pomysły zaciągnięte wprost do praktycznego zastosowania. Chylić czoła, bo i mnie zastanawiało w przeszłości co może stać za tym, że Quake jest po prostu płynny i mega dopracowany pod tym względem. Na pewno takich rzeczy jest tam wiele więcej.
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
widze, ze autor tego kodu tez nie rozumie tego co napisal
No Kłejka nie pisała jedna osoba...
mógł nawet i on pisać, sam czasem też gdzieś wcisnę jakieś dziwne obejście problemu a po pół roku za cholerę nie pamiętam o co mi chodziło,
mógł się zresztą upić, napisać w amoku i rano w ogóle o tym nie pamiętać ;) miałem tak raz na studiach :D
Czym taka instrukcja :
i = * ( long * ) &y
różni się od:
i = ( long ) y;
???
Różnica polega na tym, że na 'i' przypisujesz nie wartości jak na 'j', ale reprezentację (zapis bitowy).
Upraszczając tę dobrą odpowiedź:
załóżmy, że y = 12.3
bitowy zapis (przykładowo) 1010 0111
i = * ( long * ) &y
teraz i = 4014552,
ale ma taki sam zapis bitowy jak y. Zatem operację można odwrócić, uzyskując z naszego nowego i stare y.
i = ( long ) y;
teraz i = 12,
ale ma kompletnie inny zapis bitowy niż y (np 0000 1100). Tej operacji nie można