1

'e' 语言有一个 'ilog2' 功能,但我需要一个 'ceiling of log2' 类型的功能 - 最好的方法是什么?

我可以通过系统命令调用 Perl 并使用 POSIX::ceil ...

4

3 回答 3

1

我会做这样的事情:

ceil_log2(in : uint): uint is {  
    var bottom := ilog2(in);  
    result = (in == ipow(2,bottom)) ? bottom : bottom + 1;  
};
于 2013-12-04T22:43:25.320 回答
1

调用 perl 脚本可能会耗费大量计算资源。而是将 0.5 添加到 log2 并将类型转换(不确定电子语言是否支持它)添加到整数。

另一个尝试:

  Let y = ilog2(x);
  if ((x & x-1) == 0)  //Check if x is power of 2 
      return y; 
  else 
      return y+1;
于 2013-12-04T18:50:10.790 回答
0

如果你不介意在现实中这样做:

ceil_log2(in: uint): uint is {
  result = ceil(log10(in)/log10(2)).as_a(uint);
};
于 2013-12-06T08:11:35.093 回答