取模和舍入的位运算符



我有一个函数,它接受一个小数,并将其转换为一个带二进制指数的整数。

例如,get_whole_number(10.5)将返回=> 21, 1,其中

  • 21为整型
  • 12的幂,必须除以21才能得到原始浮点数(21/(2**1) = 10.5)。

到目前为止,我有这个函数,它工作但是效率低,速度慢:

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^"));

为了使它更快,我想用位操作替换一些操作,特别是number%1Math.round

所以我的问题是,我如何用位操作符替换% 1round()?

我想我可以使用:

  • if((number & number) == number)代替if(number%1 == 0)因为逐位操作忽略数字的小数部分;但这只是有时有效。
  • (number | number)而不是Math.round(number),但这只是截断值。

您可以替换Math。按双反位进行舍入~~

function get_whole_number(number, exponent=0) {
if(number%1 == 0) return [number, exponent];
exponent++;
number *= 2;
if(exponent >= 500) return [~~(number), exponent];
return get_whole_number(number, exponent);};

相关内容

  • 没有找到相关文章

最新更新