Zastanawiam się, o ile szybszy jest a!=0
niż !a==0
i użyłem mikroprocesora pakietu R. Oto kod (zmniejszenie 3E6 i 100 Jeśli komputer jest powolny):Czas obliczeń! =
library("microbenchmark")
a <- sample(0:1, size=3e6, replace=TRUE)
speed <- microbenchmark(a != 0, ! a == 0, times=100)
boxplot(speed, notch=TRUE, unit="ms", log=F)
Everytime, mam działkę, jak ten poniżej. Zgodnie z oczekiwaniami pierwsza wersja jest szybsza (mediana 26 milisekund) niż druga (33 ms).
Ale skąd pochodzą te bardzo wysokie wartości (wartości odstające)? Czy to jakiś efekt zarządzania pamięcią? Jeśli ustawię czas na 10, nie ma wartości odstających ...
Edycja: sessionInfo(): R wersja 3.1.2 (2014-10-31) Platforma: x86_64-w64-mingw32/x64 (64-bit)
Nie sądzę, to będzie łatwo wyśledzić; Widziałem podobne wyniki nawet z 'times = 10' lub podobnym. Pamiętaj, że 'microbenchmark' nie jest kuloodporny. Istnieje kilka blogów gdzieś wskazujących na semibug w jaki sposób zbiera informacje o czasie. Może też być tak, że od czasu do czasu w normalnym toku operacji 'R' dzieje się coś podobnego - wywołanie' gc' lub czekanie na realokację RAM na poziomie systemu, itd. Być może spróbuj uruchomić pętlę wokół 'system.time', aby zobaczyć, jaka jest dystrybucja wyników? –