Tengo una función que toma un número fraccionario y lo convierte en un número entero combinado con un exponente binario.
Por ejemplo, get_whole_number(10.5) devolverá => 21, 1 , donde
21 es el entero1 es la potencia de 2 por la que debes dividir 21 para obtener el número flotante original ( 21/(2**1) = 10.5 ).Hasta ahora tengo esta función y funciona , pero es ineficiente y lenta :
function get_whole_number(number, exponent=0) { if(number%1 == 0) return [number, exponent]; exponent++; number *= 2; if(exponent >= 500) return [Math.round(number), exponent]; return get_whole_number(number, exponent); }; console.log( get_whole_number(1.125).join("/2^")); Para hacerlo más rápido, quería reemplazar algunas operaciones, especialmente number%1 y Math.round con operaciones bit a bit.
% 1 y round() con operadores bit a bit?Estaba pensando que podría usar:
if((number & number) == number) en lugar de if(number%1 == 0) porque las operaciones bit a bit ignoran la parte fraccionaria de un número; pero esto solo funciona a veces.(number | number) en lugar de Math.round(number) pero esto solo trunca el valor.