2016-05-07 13 views
5

Javascript sklepów wszystkich numerów w formacie podwójnej precyzji 64-bit IEEE 754 wartości według spec:Czy istnieje jakiś sposób, aby zobaczyć numer w to 64-bitowy pływaka IEEE 754 reprezentacja

typ numeru ma dokładnie 18437736874454810627 (to znaczy, 2 -2 +3) wartości, reprezentujący podwójnej precyzji 64-bitowym formatem IEEE 754 wartości, jak określono w standardzie IEEE dwuskładnikowych zmiennoprzecinkową arytmetyczno

Czy istnieje sposób, aby zobaczyć numer w tej formie w JavaScript?

Odpowiedz

1

podstawie @ sugestią pointy za I zostały wdrożone następujące funkcje, aby uzyskać numer w to 64-bitowy pływaka IEEE 754 reprezentacja:

function to64bitFloat(number) { 
    var f = new Float64Array(1); 
    f[0] = number; 
    var view = new Uint8Array(f.buffer); 
    var i, result = ""; 
    for (i = view.length - 1; i >= 0; i--) { 
     var bits = view[i].toString(2); 
     if (bits.length < 8) { 
      bits = new Array(8 - bits.length).fill('0').join("") + bits; 
     } 
     result += bits; 
    } 
    return result; 
} 

console.log(to64bitFloat(12)); // 0100000000101000000000000000000000000000000000000000000000000000 
console.log(to64bitFloat(-12)); // 1100000000101000000000000000000000000000000000000000000000000000 
2

Możesz używać tablic maszynowych do sprawdzania surowych bajtów liczby. Utwórz Float64Array z jednym elementem, a następnie utwórz plik Uint8Array z tym samym buforem. Następnie możesz ustawić pierwszy element tablicy float na swój numer i sprawdzić bajty za pomocą Uint8Array. Będziesz musiał zrobić kilka zmian i kombinacji dla różnych elementów kursu, ale nie jest to trudne.

Nie ma wbudowanych urządzeń do robienia rzeczy, takich jak pobieranie wykładnika.

+0

dzięki, próbowałem następujące 'var f = new Float64Array (1); f [0] = -12; nowy Uint8Array (f.buffer) .join() 'i zwrócił to' 0,0,0,0,0,0,40,192' - Spodziewałem się tylko zer i jedynek, ale są '40' i' 192' w tym. Co ja robię źle? –

+1

Cóż, 'Uint8Array' będzie zawierał 8 8-bitowych wartości. Jeśli chcesz zobaczyć je jako binarne, możesz użyć '.toString (2)' na każdym bajcie - również, będziesz musiał przejść przez tablicę w odwrotnej kolejności, jak widać - "interesujące" bajty są na koniec. To '192' jest bitem znaku i wykładnikiem, a następnie' 40' jest najważniejszą częścią mantysy. – Pointy

+0

Rozumiem, dziękuję. Spróbuję tego. - będziesz musiał przejść przez tablicę w odwrotnej kolejności, _ - czy jest to spowodowane 'Little Endian Byte Order'? –

Powiązane problemy