0

最上位ビットの位置を取得する方法はありfloor(log(x)/log(2)) + 1ますか?

現在、私は次の忌まわしきものを実行しています:

bitcount(a)={
   my(l2, ap, l2ap);
   if(a == 0,
      return(0);
   ); 
   \\ TODO: set upper limit according to current precision
   if(a < 2^32,
      l2 = floor(log(a)/log(2));
      return(l2 + 1);
   );
   \\ Argument reduction
   l2 = floor(log(a)/log(2)) - 2;
   ap = a >> l2;
   \\ Get the fine details.
   l2ap = floor(log(ap)/log(2));
   ap = l2 + l2ap;
   return(ap + 1);
}

これが必要だったのは、私がより大きな数を扱っており、間違った結果ではなくfloor(log(2^(2^31) - 1)/log(2)) + 1正しい結果を印刷するために必要な精度が非常に大きいためです。21474836472147483648

PARI/GP には、MSB の位置を取得する組み込み関数が本当にないのですか?

4

1 に答える 1