Извлечение показателя степени и мантиссы числа Javascript

Есть ли достаточно быстрый способ извлечь показатель степени и мантиссу из числа в Javascript?

AFAIK, нет никакого способа добраться до битов за числом в Javascript, что заставляет меня думать, что я смотрю на проблему факторизации: поискm а такжеn такой, что2^n * m = k для данногоk, Поскольку целочисленная факторизация есть в NP, я могу только предположить, что это будет довольно сложной проблемой.

Я реализую плагин GHC для генерации Javascript и необходимо реализоватьdecodeFloat_Int# а такжеdecodeDouble_2Int# примитивные операции; Я думаю, я мог бы просто переписать части базовой библиотеки, которая использует эту операцию, чтобы делать то, что они делают каким-то другим способом (что не должно быть слишком сложно, так как все числовые типы в любом случае имеют Number в качестве их представления), но это ' было бы хорошо, если бы мне не пришлось.

Есть ли способ сделать это даже отдаленно эффективным способом, с помощью некоторого темного вуду Javascript, умной математики или каких-то других средств, или я должен просто пристегнуться и иметь в базовой библиотеке?

РЕДАКТИРОВАТЬ Основываясь на превосходных ответах Руаха и Луи Вассермана, я придумал следующую реализацию, которая, кажется, работает достаточно хорошо:

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};
}

Ответы на вопрос(8)

Ваш ответ на вопрос