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 に追加し、typecast (e-language がサポートしているかどうか不明) を整数に追加します。

別の試み:

  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 に答える