javascript - 在 JavaScript 中快速接近 2 的幂?

标签 javascript double bit-manipulation ieee-754

下面的表达式是否有更快的替代方法:

Math.pow(2,Math.floor(Math.log(x)/Math.log(2)))

也就是说,取最接近(较小)的 2 的整数次幂?我在内循环中有这样的表达。我怀疑它可能会快得多,考虑到可以只从 double 的 IEEE 754 表示中获取尾数。

最佳答案

利用 ES6 的 Math.clz32(n)计算 32 位整数的前导零:

// Compute nearest lower power of 2 for n in [1, 2**31-1]:
function nearestPowerOf2(n) {
  return 1 << 31 - Math.clz32(n);
}

// Examples:
console.log(nearestPowerOf2(9));  // 8
console.log(nearestPowerOf2(33)); // 32

关于javascript - 在 JavaScript 中快速接近 2 的幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26965171/

相关文章:

java - 在Junit测试中,如何使用assertEquals()比较两个ArrayList<Double>,是否有更好的替代方案?

delphi - 在Delphi中处理任意位长度的数据?

javascript - 使用 javascript/dojo 计算 html 元素 (div) 宽度?

javascript - 将回调/ promise 从组件传递给操作创建者

javascript - 显示 2 个日期选择器日期之间的天数?

javascript - HTML/JavaScript 拖放但在拖动过程中更改文本?

Java - 将 byte[] 转换为 double[],反之亦然

java - 四舍五入 - 几十

java - 反转 32 位无符号整数的位

c - 如何在保留原始位模式的同时将 (int) 转换为 (unsigned int)?