v1
- by joint_keno_egypt_naptha 7/29/202100
Setup HTML - click to add setup HTML
disable setup JavaScript
Setup JavaScript
const numbers = [
	-100,
	100,
	1000000,
	-1000000,
    -833104355893312,
    1903318398499,
    612220539711103,
    -7158314534396895,
    4426161736746491,
    -1550.65324,
    2316998423414107,
    -351139018211.5476,
    3064775428585727.13434,
    6176764689210239,   
    3.141592653589793
]
delete caserun single casemove downdrag and drop case


ready



// https://stackoverflow.com/a/30690986/1742070

function numberParts(x, b = 10) {
  var exp = 0
  var sgn = 0
  if (x === 0) return { sign: 0, mantissa: 0, exponent: 0 }
  if (x<0) sgn=1, x=-x
  while (x>b) x/=b, exp++
  while (x<1) x*=b, exp--
  return { sign: sgn, mantissa: x, exponent: exp }
}

numbers.forEach(number => numberParts(number, 10))

delete caserun single casemove upmove downdrag and drop case


ready



// https://stackoverflow.com/a/11148451/1742070

function decodeIEEE64 ( value ) {

    if ( typeof value !== "number" )
        throw new TypeError( "value must be a Number" );

    var result = {
        isNegative : false,
        exponent : 0,
        mantissa : 0
    };

    if ( value === 0 ) {

        return result;
    }

    // not finite?
    if ( !isFinite( value ) ) {

        result.exponent = 2047;

        if ( isNaN( value ) ) {

            result.isNegative = false;
            result.mantissa = 2251799813685248; // QNan

        } else {

            result.isNegative = value === -Infinity;
            result.mantissa = 0;

        }

        return result;
    }

    // negative?
    if ( value < 0 ) {
        result.isNegative = true;
        value = -value;
    }

    // calculate biased exponent
    var e = 0;
    if ( value >= Math.pow( 2, -1022 ) ) {   // not denormalized

        // calculate integer part of binary logarithm
        var r = value;

        while ( r < 1 )  { e -= 1; r *= 2; }
        while ( r >= 2 ) { e += 1; r /= 2; }

        e += 1023;  // add bias
    }
    result.exponent = e;

    // calculate mantissa
    if ( e != 0 ) {

        var f = value / Math.pow( 2, e - 1023 );
        result.mantissa = Math.floor( (f - 1) * Math.pow( 2, 52 ) );

    } else { // denormalized

        result.mantissa = Math.floor( value / Math.pow( 2, -1074 ) );

    }

    return result;
}

numbers.forEach(number => decodeIEEE64(number))
delete caserun single casemove upmove downdrag and drop case


ready



// https://stackoverflow.com/a/17156580/1742070

function getNumberParts(x)
{
    var float = new Float64Array(1),
        bytes = new Uint8Array(float.buffer);

    float[0] = x;

    var sign = bytes[7] >> 7,
        exponent = ((bytes[7] & 0x7f) << 4 | bytes[6] >> 4) - 0x3ff;

    bytes[7] = 0x3f;
    bytes[6] |= 0xf0;

    return {
        sign: sign,
        exponent: exponent,
        mantissa: float[0],
    }
}

numbers.forEach(number => getNumberParts(number))
delete caserun single casemove updrag and drop case


ready



// https://stackoverflow.com/a/53980679/1742070

function numberSplit(number) {
	const [mantissa, exponent] = number.toExponential().split("e");
	return parseFloat(mantissa), parseInt(exponent)
}

numbers.forEach(number => numberSplit(number))
Test Case - click to add another test case
Teardown JS - click to add teardown JavaScript
Output (DOM) - click to monitor output (DOM) while test is running
RUN