【发布时间】:2015-01-13 22:06:20
【问题描述】:
下面的表达式是否有更快的替代方法:
Math.pow(2,Math.floor(Math.log(x)/Math.log(2)))
也就是说,取最接近(较小)的 2 的整数幂?我在内循环中有这样的表达。我怀疑它可能会快得多,考虑到可以从双精度的 IEEE 754 表示中获取尾数。
【问题讨论】:
-
你为什么不硬编码 log 2 的值?还是那太可变了?
-
啊,我当然可以。但是我仍然在取一个对数,然后除法,然后取一个楼层,然后取 2 的幂。这已经太多了,当信息都已经在 double 本身上时!如果我能投...
-
我实际上已经阅读了整个线程......它的大部分答案都处理整数并且主要依赖于 JS 上不可用的 C hacks......
-
该表达式并不总是适用于接近 2 次方的双打。例如,尝试 x=35184372088831.9(略低于 2^45)。您的表达式返回 2^45,而不是 2^44。
标签: javascript double bit-manipulation ieee-754