मैं सोच रहा था कि a!=0
!a==0
से अधिक है और आर पैकेज माइक्रोबेंमार्क का उपयोग किया गया है। कोड यह (3e6 और 100 को कम करता है, तो अपने पीसी धीमी है):गणना समय! =
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)
हर, मैं नीचे से एक की तरह एक साजिश मिलता है। जैसा कि अपेक्षित है, पहला संस्करण दूसरे (33 एमएस) की तुलना में तेज (औसत 26 मिलीसेकंड) है।
लेकिन इन कुछ बहुत ही उच्च मूल्य (आउटलाइर्स) कहां से आते हैं? क्या यह कुछ स्मृति प्रबंधन प्रभाव है? अगर मैं 10 से समय निर्धारित करता हूं, तो कोई आउटलेटर्स नहीं हैं ...
संपादित करें: sessionInfo(): आर संस्करण 3.1.2 (2014-10-31) प्लेटफ़ॉर्म: x86_64-w64-mingw32/x64 (64-बिट)
मुझे नहीं लगता कि यह पता लगाने के लिए आसान होने जा रहा है है, मैंने 'times = 10' या तो भी इसी तरह के परिणाम देखे हैं। ध्यान रखें कि 'माइक्रोबेंमार्क' बुलेटप्रूफ नहीं है। वहाँ कुछ ब्लॉग हैं जो कहीं सेमिबग इंगित करते हैं कि यह समय की जानकारी कैसे एकत्र करता है। यह भी हो सकता है कि कुछ अन्य "चीज" हर समय होती है और फिर 'आर' संचालन के सामान्य पाठ्यक्रम के दौरान - एक 'जीसी' कॉल, या सिस्टम स्तर पर रैम पुनर्वितरण की प्रतीक्षा आदि। शायद एक लूप चलाने की कोशिश करें 'system.time' देखने के लिए परिणाम का वितरण क्या है? –