'e'语言有'ilog2'功能,但我需要'log2'类型的功能 - 这是最好的方法吗?
我可以通过系统命令调用Perl并使用POSIX :: ceil ...
答案 0 :(得分:1)
调用perl脚本可能计算成本很高。而是将0.5添加到log2并将类型转换(不确定e语言是否支持它)添加到整数。
另一次尝试:
Let y = ilog2(x);
if ((x & x-1) == 0) //Check if x is power of 2
return y;
else
return y+1;
答案 1 :(得分:1)
我会做这样的事情:
ceil_log2(in : uint): uint is {
var bottom := ilog2(in);
result = (in == ipow(2,bottom)) ? bottom : bottom + 1;
};
答案 2 :(得分:0)
如果你不介意真的这样做:
ceil_log2(in: uint): uint is {
result = ceil(log10(in)/log10(2)).as_a(uint);
};