为什么这个函数在长数字比短数字更快运行?

我写了一个JS perf来表明通过减少量级来解析数字中的数字比字符串评估(对于排序任务)更快。 我发现虽然减号算法对更长的数字执行操作的速度更快(不是每个数字,但是总数),即使它应该为更长的数字循环更多次。 它发生在OS X上的Chrome,Safari和Firefox上(尚未测试其他操作系统)。

任何想法这里发生了什么?

以下是perf:http://jsperf.com/get-digits-from-integer

编辑这是一个表现不同数字的8,16,32,64和128数字的差异。只有8位数字比预期的要慢,在16位数字时,随着数字变长,性能会下降。 http://jsperf.com/get-digits-from-integer/3

这里有问题的功能:

function getDigitsByMagnitudeReduction(num){
  var digits = [];
  while (num > 0){
    digits.push(num % 10);
    num = (num / 10) >> 0;
  }
  return digits.reverse();
}

在检查函数的性能之前,您应该检查它是否实际返回正确的结果。

您正在使用>> 0将数字截断为整数。 按位操作使用32位数字,因此该功能仅适用于编号最大为21474836479数字。

如果你使用num = Math.floor((num / 10)); 它将与较大的数字工作,但数字的JavaScript中的精度限制为15-17位,所以无论结果为91827766102983847569298376298387839也不对91882759110292883726299387440027766102983847569298376298387839将是正确的。

链接地址: http://www.djcxy.com/p/64171.html

上一篇: Why does this function run faster with long numbers than short numbers?

下一篇: Can Javascript Prototype Pattern Performance Be Improved