我正在閱讀其他網站(Computer Science - Can a Minimum Possible Efficiency be proven?)的文章,關於在最壞的情況下假設最小的大O時間。爲什麼在Firefox中爲bitwise-xor(^)比不等於(!=)comparisson更快?
其中一個答案的長度解釋了比較二進制值(或類似)所需的時間。
而我雖然對自己:爲什麼不按位操作?
而且我在Javascript使這個實體模型代碼:
console.time('^');
for(var i=0;i<1e5;i++)13^15;
console.timeEnd('^');
console.time('!=');
for(var i=0;i<1e5;i++)13!=15;
console.timeEnd('!=');
而且我真的很驚訝!
使用^
(bitwise-xor)的循環幾乎可以更快地變爲3ms!
這怎麼可能?
爲什麼bitwise-xor(^
)快於不等於(!=
)comparisson?
其他可能相關的信息:
我已經在Firefox 34.0.5測試了Windows 7家庭高級版64位運行。
我也在Opera 12.17(x64)和Chrome 39.0.2171.95上試過這段代碼,其行爲幾乎相似,代碼中使用^
的測試速度更快80%。
另一個驚喜:
在PHP中,運行以下命令:
$now=microtime(true);
for($i=0,$x=0;$i<1e6;$i++)$x+=13^15;
echo microtime(true)-$now,PHP_EOL;
$now=microtime(true);
for($i=0,$x=0;$i<1e6;$i++)$x+=13!=15;
echo microtime(true)-$now,PHP_EOL;
顯示完全相同同樣的效果:^
比!=
更快。
使用$x+=!13^15;
代替$x+=13^15;
時間快70%。
我在http://writecodeonline.com/php/上測試過,它在linux x64上運行PHP 5.3。
此代碼具有從用戶@AlexK一個建議,在以下注釋:
13^15是一個恆定空操作,也許是其簡單地優化掉(試一下有效X + = 13^15; )
將迭代計數增加10倍以排除噪聲影響並給出百分比差異。沒有參考比較它的絕對值是沒有意義的。 – usr
@usr你有沒有任何例子可以讓我瞭解如何做到這一點,而不會使用printscreens淹沒這篇文章? –
只是說「它快了x%」。我被迫自己運行這個基準來發現。 – usr