Aktywne Wpisy
szklarskaporeba +624
#korposwiat #pracbaza #big4 Młode roczniki są bardzo śmieszne. Dzisiaj '99 podszedl na open space do managera i powiedział ze albo pierwsze dwa tygodnia listopada będzie mieć wolne a potem home working do końca roku albo jutro rzuca wypowiedzenie xD. Pulsujących zawołam jutro z rozwinięciem sytuacji.
timeofthe +28
#famemma fakty są takie że z pewnością wykopki pisały gorsze rzeczy na 6 obcy czy asku niż połowa oskarżonych na Pandora gate xd obrońcy moralności oglądający patologię. Dziwne że taki wardega nie jest ciśnięty za boobs mana
inline void fastReadint(int *x) {
register int c = getchar_unlocked();
*x = 0;
for(; ((c<48 || c>57) && c != ' '); c = getcharunlocked());
for(; c>47 && c<58 && c != ' ' ; c = getcharunlocked()) {
*x = (*x<<1) + (*x<<3) + c - 48;
}
}_
#programowanie #c #informatyka
2. inline i register nie są przypadkiem ignorowane przez praktycznie wszystkie kompilatory?
3. (x<<1) + (x<<3) wygląda pro, ale clang to optymalizuje do zwykłego x*10 http://goo.gl/eR0vNV
Also: c < '0' || c > '9' wygląda imho czytelniej niż c < 48 || c > 57
Optymalizowanie tego będzie prawdopodobnie sztuką dla sztuki, bo 99.9% czasu będzie spędzone wewnątrz wywołania getchar.
O dziwo gcc 4.3.2 na linuksie nie ignoruje inline ani register. Po wrzuceniu zmiennej do rejestru procesora czas dostępu się skraca(testowałem) - różnica 0.1 sekundy przy dużym wejściu.
Na gcc przesunięcia bitowe działają szybciej niż zwykłe mnożenie, też sprawdzone - różnica 0.15 s.
zwracam przez ptr, bo
@kleszczydron9000: Przesunięcie bitowe to akurat jedna operacja maszyny, co ciekawe ARM'y (nie wiem jak '86) dostarczają operację shift and multiply i różne ich kombinacje i to zajmuje 2 +/-1 takty zegara na operacje. Więc szukanie tu oszczędności jest mocno na siłę.
Skoro na gcc przesunięcia działają szybciej niż mnożenie na typie int wiedz, że masz stary kompilator. Tu różnice są wyraźne na maszynach typu AVR8.