以下のコードは BigIntegern
を取り、それより小さい数値n
もpower of 2
. 小さい数値では正常に機能しますが、if
ステートメントの最初の分岐は int.MaxValue 以上では機能しません。どうやら1
( BigInteger.Log(n - 1)
) を引くだけでは、大きな数には十分ではありません。
違いを生むのに十分な大きさでありながら、より小さな数でも機能する減算する数を計算するにはどうすればよいですか?
public BigInteger FindNearestPowerOfTwo (BigInteger n)
{
double number = 0;
BigInteger big = 0;
if (n.IsPowerOfTwo)
{
number = BigInteger.Log(n - 1) / BigInteger.Log(2);
}
else
{
number = BigInteger.Log(n) / BigInteger.Log(2);
}
number = Math.Floor(number);
big = BigInteger.Pow(2, (int) number);
return (big);
}