我正在尝试用python实现math.frexp
函数。如果您感到困惑,请参阅here。很显然,我正在汗学院的this项目上工作。你知道吗
但是,它是PJS,不支持DataView
或ArrayBuffer
。有人能帮我实现这个吗?你知道吗
以下是当前代码(由于DataView
/ArrayBuffer
而注释掉)。我在网上找到的。你知道吗
var frexp = function(value) {
if (value === 0){
return [value, 0];
}
var data = new DataView(new ArrayBuffer(8));//Does not support DataView and ArrayBuffer objects.
data.setFloat64(0, value);
var bits = (data.getUint32(0) >>> 20) & 0x7FF;
if (bits === 0) {
data.setFloat64(0, value * Math.pow(2, 64));
bits = ((data.getUint32(0) >>> 20) & 0x7FF) - 64;
}
var exponent = bits - 1022,
mantissa = value * Math.pow(2, -exponent);
return [mantissa, exponent];
};
它的效率不如读取字节
应该返回一对,这样
2^(e-1) <= val < 2^e
和0.5 <= m < 1
。在ecma6中,商可以用Math.log2
代替。你知道吗对数的浮点运算可能导致二次幂的模糊结果。如果
e=exponent
太小,可能会得到错误的结果。因此添加行相关问题 更多 >
编程相关推荐