'e' 语言有一个 'ilog2' 功能,但我需要一个 'ceiling of log2' 类型的功能 - 最好的方法是什么?
我可以通过系统命令调用 Perl 并使用 POSIX::ceil ...
'e' 语言有一个 'ilog2' 功能,但我需要一个 'ceiling of log2' 类型的功能 - 最好的方法是什么?
我可以通过系统命令调用 Perl 并使用 POSIX::ceil ...
我会做这样的事情:
ceil_log2(in : uint): uint is {
var bottom := ilog2(in);
result = (in == ipow(2,bottom)) ? bottom : bottom + 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;
如果你不介意在现实中这样做:
ceil_log2(in: uint): uint is {
result = ceil(log10(in)/log10(2)).as_a(uint);
};