最上位ビットの位置を取得する方法はあり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
正しい結果を印刷するために必要な精度が非常に大きいためです。2147483647
2147483648
PARI/GP には、MSB の位置を取得する組み込み関数が本当にないのですか?