我想写一个函数,返回最近的2个数的下一个幂.例如,如果我的输入是789,输出应该是1024.有没有任何方法可以实现这一点而不使用任何循环但只使用一些按位运算符?
是否有一种相当快速的方法从Javascript中的数字中提取指数和尾数?
AFAIK有没有办法在后面的Javascript一个号码,这使得它在我看来位拿到我正在寻找一个因子分解问题:找到m并n使得2^n * m = k对于给定的k.由于整数分解是在NP中,我只能假设这将是一个相当难的问题.
我正在实现一个用于生成Javascript的GHC插件,需要实现decodeFloat_Int#和decodeDouble_2Int# 原始操作 ; 我想我可以重写使用该操作的基本库的部分来做他们正在以其他方式进行的操作(这不应该太难,因为所有数字类型都有数字作为他们的表示,但它'如果我不需要,那就好了.
有没有办法以一种甚至是高效的方式,通过一些黑暗的Javascript伏都教,聪明的数学或其他方式来做到这一点,或者我应该只是扣下来并拥有基础库?
编辑 根据ruakh和Louis Wasserman的出色答案,我提出了以下实现,这似乎运作得很好:
function getNumberParts(x) {
if(isNaN(x)) {
return {mantissa: -6755399441055744, exponent: 972};
}
var sig = x > 0 ? 1 : -1;
if(!isFinite(x)) {
return {mantissa: sig * 4503599627370496, exponent: 972};
}
x = Math.abs(x);
var exp = Math.floor(Math.log(x)*Math.LOG2E)-52;
var man = x/Math.pow(2, exp);
return {mantissa: sig*man, exponent: exp};
}
Run Code Online (Sandbox Code Playgroud)